DI:依赖注入,是IOC的一种重要实现 。一个对象的创建往往会涉及到其他对象的创建,比如一个对象A的成员变量持有着另一个对象B的引用,这就是依赖,A依赖于B。IOC机制既然负责了对象的创建,那么这个依赖关系也就必须由IOC容器负责起来。负责的方式就是DI——依赖注入,通过将依赖关系写入配置文件,然后在创建有依赖关系的对象时,由IOC容器注入依赖的对象,如在创建A时,检查到有依赖关系,IOC容器就把A依赖的对象B创建后注入到A中(组装,通过反射机制实现),然后把A返回给对象请求者,完成工作。总的来说就是将一个类注入到另一个类之中,所以除了本次列举的配置文件中的注入,自定义类上面使用的@Resource、@Autowired都属于依赖注入
在spring-base配置文件中除了可以配置bean对象外,还可以对bean对象的属性进行配置:
<bean id="emp" class="cn.lt.spring.vo.Emp">
<property name="empno" value="7369"/>
</bean>
这是对于单个类进行的IOC的处理,但是如果A类依赖于B类呢?
A类中:
private B b ;
public void setB(B b){
this.b = b ;
}
这样spring中的处理是只需要在A类<bean>标签中引入B就可以了:
<bean id="a" class="cn.lt.spring.vo.A">
<property name="ano" value="7369"/>
<property name="b" ref="b" /> //对依赖类的注入使用<property>就可以
</bean>
<bean id="b" class="cn.lt.spring.vo.B">
<property name="bno" value="8899"/>
</bean>
数组注入:使用<array>标签
<array>
<ref bean="B">
<ref bean="C">
</array>
list集合注入:使用<list>标签,默认使用ArrayList
<list>
<ref bean="B">
<ref bean="C">
</list>
set集合注入:默认使用LinkedHashSet子类
<set>
<ref bean="B">
<ref bean="C">
</set>
map集合注入:默认使用LinkedHashMap子类
<map>
<entry key="a" bean="B">
<entry key="b" bean="C">
</map>
properties集合注入:
<props>
<prop key="hello">世界</prop>
<ref key="world">你好</prop>
</props>