DI就是依赖注入,它在以下两种情况下发生:
- 用户第一次调用getBean()方法时,ioc容器出发依赖注入。
- 当用户在配置文件中将 bean 元素配置了 lazy-init=false 属性时,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入。
依赖注入的数据
依赖注入的有三类数据类型:
- 基本数据类型和string
- bean类型(由配置文件或者注解配置的)
- 复杂类型/集合类型
依赖注入的方法
1.使用构造函数注入
类中含有有参构造函数,在配置文件中,该类的bean标签里使用constructor-arg 标签进行数据的注入。constructor-arg 标签的属性:
- name:构造函数参数的名称;
- type:参数的数据类型;
- index:参数的索引,从0开始
- value:用于提供基本类型和string类型的数据;
- ref:用于指定其他bean类型数据,就是在spring的ioc容器里出现过的bean对象。如上图中的Date对象。
优势:在获取bean对象时注入数据是必须的操作,否则对象无法创建。
弊端:改变了bean对象的实例化方法,使创建对象时如果用不到这些数据也必须提供。
2.使用set方法注入数据
使用set方法注入更常用。
要利用到bean标签中使用property标签。
property标签的属性:
- name:用于指定注入时所调用的set方法名称
- value:用于提供基本类型和string类型数据
- ref:用于指定其他的bean类型数据
优势:创建对象时没有明确限制,可以直接使用默认构造函数。
弊端:如果某个成员必须有值,但是set方法有可能没有执行。
3.对复杂类型的数据注入
用于给List结构集合注入的标签:list , array , srt
用于给Map结构集合注入的标签:map , props