问题
在学习了使用IOC创建对象的三种方式后,可以根据需求在applicationcontext.xml文件中配置对象的创建方式.但是目前不管是属性注入方式,还是构造器方式,创建对象的时候,赋值赋予的都是基本类型的数据.但是对象中还有引用类型的属性,比如A对象中有属性B,我希望从Spring容器中获取一个B属性有值的A对象,怎么办?
对象之间的依赖关系
我们在设计类对象时,会在类中声明其他类类型的属性,来调用其他类的资源完成当前类的功能处理,比如A类中声明B属性,在A类中就可以直接调用B类的资源完成A类的功能开发,但是A 对象被创建时,其B属性必须有值,否则空指针异常,我们将此种也就是A和B的关系称为对象之间的依赖关系(A依赖B).
依赖责任链:
对象之间项目依赖形成的一条链式依赖关系.
D d=new D();
C c=new C(d)
B b=new B©;
A a=new A(b);
A<—B<----C<----D
解决:
让Spring容器根据对象之间的依赖关系,将依赖责任连上的所有的对象全部配置为Bean对象.并且根据依赖关系完成对象之间的组装.将组装好的对象返回给用户使用.
DI:依赖注入
就是Spring容器根据 对象之间的依赖关系完成对象的创建以及组装的过程.
DI依赖注入的代码实现
applicationcontext.xml配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- DI依赖的使用流程 ①将依赖责任链上的所有的对象都配置为bean ②根据依赖关系完成对象之间的组装配置 通过构造器方式: i.必须在类中声明对应的构造器 ii.在bean标签下使用constructor-arg子标签完成以来注入 使用constructor-arg的属性ref,ref的值为要注入的bean的ID 通过set方法方式 i.必须在类中声明引用属性对应的set方法 ii.在bean标签下使用property子标签完成以来注入 在property子标签中使用ref属性,属性值为要被注入的bean的ID -->
<!--配置学生bean对象-->
<bean id="stu" class="com.pojo.Student">
<!--构造器方式-->
<!--<constructor-arg index="0" name="teacher" type="com.pojo.Teacher" ref="tea" ></constructor-arg>-->
<!--set方式-->
<property name="teacher" ref="tea"></property>
<property name="sname" value="张三"></property>
<property name="sid" value="1"></property>
</bean>
<bean id="tea" class="com.pojo.Teacher">
<property name="tid" value="2"></property>
<property name="tname" value="老师"></property>
</bean>
</beans>