前言

上节学习了IOC创建对象的方式,我们在不知不觉中使用了最简单的构造注入,什么是构造注入,什么又是依赖注入呢?

一、首先我们要了解DI是什么?

创建对象的过程中Spring可以依据配置对象的属性进行设置,这个过程称之为依赖注入,也即DI。
顾名思义,你就会明白构造注入就是通过构造方法给属性进行赋值。

二、DI的几种注入方式

需要用到的实体类:

package com.shan.pojo;import lombok.Data;
import lombok.ToString;@Data @ToString
public class Address {private String address;
}
package com.shan.pojo;import lombok.Data;
import lombok.ToString;import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@Data @ToString
public class Student {private String name;private Address address;private String[] books;private List<String> hobbies;private Map<String,String> card;private Set<String> games;private String wife;private Properties info;
}
package com.shan.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data @ToString @NoArgsConstructor @AllArgsConstructor
public class User {private String name;private String age;}

1.普通注入

    <!--普通注入--><property name="name" value="小黑神"/>

2.Bean注入

    <!--Bean注入--><property name="address" ref="address"/>

3.数组注入

    <!--数组注入--><property name="books"><array><value>红楼梦</value><value>西游记</value><value>水浒传</value><value>三国演义</value></array></property>

4.List注入

    <!--List集合注入--><property name="hobbies"><list><value>女朋友</value><value>敲代码</value><value>刷抖音</value><value>看小说</value><value>玩游戏</value></list></property>

5.Map注入

    <!--Map注入--><property name="card"><map><entry key="身份证" value="42102220001002xxxx"/><entry key="学生证" value="18103020134"/><entry key="银行卡" value="666666666666666666"/></map></property>

6.Set注入

    <!--Set集合注入--><property name="games"><set><value>lol</value><value>coc</value><value>bob</value><value>cs</value><value>永劫无间</value></set></property>

7.null注入

    <!--null注入--><property name="wife"><value>null</value></property>

8.Properties注入

        <!--Properties集合注入--><property name="info"><props><prop key="学号">18103020134</prop><prop key="性别">男</prop><prop key="username">root</prop><prop key="password">xxx</prop></props></property>

拓展注入

<!--拓展注入方式p命名空间和c命名空间不能是直接使用,需要导入xml约束!xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.springframework.org/schema/c"--><!--p命名空间注入,可以直接注入属性的值:property--><bean id="user" class="com.shan.pojo.User" p:name="小黑神" p:age="18"/><!--c命名空间注入,可以通过构造器注入:construct-args--><bean id="user2" class="com.shan.pojo.User" c:name="小黑神zxs" c:age="18" scope="singleton"/><!--作用域scope="singleton" 单例模式 Spring默认scope="prototype" 原型模式 每次从容器中get的时候都会产生一个新对象!-->

测试

import com.shan.pojo.Student;
import com.shan.pojo.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void testStudent(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");Student student = (Student) context.getBean("student");System.out.println(student);}@Testpublic void testUser(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("userbean.xml");User user = context.getBean("user", User.class);User user2 = context.getBean("user2", User.class);System.out.println(user);System.out.println(user2);}//User(name=小黑神, age=18)//User(name=小黑神zxs, age=18)}

作者有话说

博客创作不易,希望看到这里的读者动动你的小手点个赞,如果喜欢的小伙伴可以一键三连,作者大大在这里给大家谢谢了。

Spring学习4之依赖注入(DI)相关推荐

  1. 初学者都能看懂的 Spring 源码之依赖注入(DI)源码分析

    前言 在面试中,经常被问到 Spring 的 IOC 和 DI (依赖注入),很多人会觉得其实 IOC 就是 DI ,但是严格上来说这两个其实并不等价,因为 IOC 注重的是存,而依赖注入注重的是取, ...

  2. Spring学习资料之 依赖注入(二)

    1.2 属性注入(Field Inject) 1.2.1 基本属性注入 首先来看一个例子.Service.java 1 @ImplementedBy(ServiceImpl.class) 2 publ ...

  3. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  4. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  5. 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)...

    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...

  6. Spring框架—③依赖注入DI、Bean作用域及自动装配

    依赖注入 DI,Dependency injection 依赖: 指bean对象的创建依赖于Spring容器 注入: 指Bean对象所依赖的资源,由容器来设置和装配 在beans.xml中配置 1.常 ...

  7. 控制反转IOC与依赖注入DI

    为什么80%的码农都做不了架构师?>>>    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最 ...

  8. 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程

    一.依赖注入DI 学习目标 1)搞清楚构造参数依赖注入的过程及类 2)搞清楚注解方式的属性依赖注入在哪里完成的. 学习思路 1)思考我们手写时是如何做的 2)读 spring 源码对比看它的实现 3) ...

  9. 控制反转(IoC)与依赖注入(DI)详解

    文章目录 什么是控制反转(IoC) 控制反转(IoC)有什么作用 控制反转(IoC)是怎么分类的 依赖注入 接口注入 Setter方法注入 构造器注入 依赖查找 上下文依赖查找(Contextuali ...

最新文章

  1. Ext.NET加入自定义验证JS函数
  2. 心智图/思维导图(Mind Map/Mind Mapping),思维导图介绍
  3. D3可视化:(1)初次见面,SVG与D3的魅力
  4. ip地址互转十进制数字(函数)
  5. JavaScript 学习笔记— —Date对象
  6. JSP 中的几种注释
  7. windows系统生成tar
  8. CentOS 7 多网卡绑定
  9. 如何加载和保存AutoCAD DXF文件(七参数法)
  10. 用计算机控制人造卫星和导弹发射,用计算机控制人造卫星和导弹的发射,按计算机应用的分类,它应属于什么...
  11. 网站CNZZ数据统计的实现方式
  12. BP神经网络原理(附实验程序)
  13. Dharma勒索软件继续大肆传播,据称已有100多家希腊网站沦陷
  14. jlink修复固件教程
  15. PHP的ES入门(一)—— Index的创建和删除
  16. python人民币小写转大写_Python小程序 -- 人民币小写转大写辅助工具
  17. 基于新浪微博的男女性择偶观数据分析
  18. UVa 紫书50题留念
  19. python-os模块使用
  20. 从面试官的角度,来聊聊培训班对程序员的帮助!

热门文章

  1. 爬虫 wordcloud操作
  2. awk打印第一个字母
  3. spring websocket源码分析
  4. txt文件导入mysql--转
  5. 【DBA】DBA——数据库管理员
  6. Google单季度,营收超过753亿美元
  7. Node.js Web 模块
  8. Introduction to Machine Learning
  9. 互联网到了什么程度?
  10. 关于Ping的TTL的含义