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 "> <!--创建student的bean对象--> <!--工厂设计模式--> <!--动态工厂--> <bean></bean> <!--生产Student对象--> <bean factory-bean="factory" factory-method="newIntance"></bean> <!--静态工厂--> <!--可以理解为静态方法直接用类名调用--> <bean factory-method="newIntance"></bean> </beans>TestObject代码示例:
public class testStu { public static void main(String[] args) { //创建容器对象 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml"); //获取容器中的对象 //工厂设计模式 //动态工厂 Student student = (Student) ac.getBean("stu4"); System.out.println("动态工厂:"+student); //静态工厂 Student student1 = (Student) ac.getBean("stu5"); System.out.println("静态工厂:"+student1); } } 7.IOC的依赖注入DI依赖注入DI的介绍
问题:
在学习了使用IOC创建对象的三种方式后,可以根据需求在applicationContext.xml文件中配置对象的创建方式.但是目前不管是属性注入方式,还是构造器方式,创建对象的时候,赋值赋予的都是基本类型的数据.但是对象中还有引用类型的属性,比如A对象中有属性B,我希望从Spring容器中获取一个B属性有值的A对象,怎么办?
对象之间的依赖关系:
我们在设计类对象时,会在类中声明其他类类型的属性,来调用其他类的资源完成当前类的功能处理,比如A类中声明B属性,在A类中就可以直接调用B类的资源完成A类的功能开发,但是A对象被创建时,其B属性必须有值,否则空指针异常,我们将此种也就是A和B的关系称为对象之间的依赖关系(A依赖B).
当一个类(A)中需要依赖另一个类(B)对象时,把B赋值给A的过程就叫依赖注入。
依赖责任链:
对象之间项目依赖形成的一条链式依赖关系.
D d=new D();
C c=new C(d)
B b=new B(c);
A a=new A(b);
A<---B<----C<----D
解决:
让Spring容器根据对象之间的依赖关系,将依赖责任连上的所有的对象全部配置为Bean对象.并且根据依赖关系完成对象之间的组装.将组装好的对象返回给用户使用.
概念:
DI:依赖注入,就是Spring容器根据对象之间的依赖关系完成对象的创建以及组装的过程.
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 "> <!-- 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> <!--构造器方式--> <!--<constructor-arg index="0" type="com.bjsxt.pojo.Teacher" ref="tea" ></constructor-arg>--> <!--set方式--> <property ref="tea"></property> <property value="张三"></property> <property value="1"></property> </bean> <bean> <property value="2"></property> <property value="刘老师"></property> </bean> </beans>