所谓依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念。
DI (Dependency Injection)
-
依赖:指bean对象的创建依赖于Spring容器。bean对象依赖的资源
-
注入:指Bean对象所依赖的资源,由容器来设置和装配。
依赖注入有两种实现方式:
Setter方式(传值方式) 和 构造器方式(引用方式)。
构造器注入
构造器注入可以参考上篇博客:SpringIOC创建对象的四种方式
- 有参
- 无参
setter注入
要求被注入的属性,必须有set方法。set方法的名字需要规范:
set+属性名(属性名字母大写);
1 常量注入
<!--普通字段-->
<property name="name" value="小明"/>
2 Bean注入
<!--引用其他bean使用ref-->
<property name="address" ref="addr"/>
3 数组注入
<!--数组的注入-->
<property name="books">
<array>
<value>西游记</value>
<value>水浒传</value>
<value>红楼梦</value>
<value>三国演义</value>
</array>
</property>
4 List注入
<!--List注入-->
<property name="hobbys">
<list>
<value>女孩</value>
<value>代码</value>
<value>电影</value>
<value>音乐</value>
</list>
</property>
5 Map注入
标签:entry
键:使用key
值: 使用value
<!--Map的注入-->
<property name="card">
<map>
<entry key="phone" value="10000000000"/>
<entry key="card" value="455545454545454545"/>
</map>
</property>
6 Set注入
<!--Set注入-->
<property name="games">
<set>
<value>英雄联盟</value>
<value>刺客信条</value>
<value>绝地求生</value>
</set>
</property>
7 空值注入
<!--Null空值注入-->
<property name="girlFriend">
<null/>
</property>
8 Properties注入
props标签
键使用key
值,在标签中间;
<!--Properties注入-->
<property name="info">
<props>
<prop key="学号">201932301</prop>
<prop key="性别">男</prop>
<prop key="姓名">小明</prop>
</props>
</property>
总结:上面是依赖注入DI的一些常见注入形式,自身对象中的内置对象是通过注入的方式进行创建,由容器全权负责组件的装配,及对象的维护,实现了解耦,把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造子传递给需要的对象。