DI(依赖注入)
概念:给属性赋值
property用来描述类的属性
name代表属性的名称
value代表属性的值属性为基本类型
对于引用类型用<ref bean="" />赋值
Setter方法
说明:1、spring容器实例化person和student两个对象
2、利用java的反射机制调用属性的setter方法赋值
3、在客户端利用context.getBean方法把spring容器中的一个对象获取了。
说明:
1、启动spring容器
2、实例化person对象和student对象
3、给person中的属性赋值
4、调用person的init方法初始化
5、客户端利用context.getBean获取对象
说明:
1、启动spring容器
2、实例化person对象
3、因为person对象依赖于student对象,所以在实例化person对象的时候必须实例化student对象,所以这个时候,在student对象上的lazy-init为true将失效
说明:1、 启动spring容器
2、 实例化student
3、 在客户端执行context.getBean方法获取person对象
4、 实例化person对象,调用person的构造函数
5、 调用person中的setStudent方法,给person中的student赋值
6、 执行person中的init方法
7、 Person对象调用方法
构造器赋值:
说明:
1.constructor-arg代表指定的构造器函数中的一个参数
2.可以利用index,ref,value,type来制定唯一的构造器
3.如果一个bean的配置中没有constructor-arg属性,则必须利用默认的构造器创建对象
4.所以写一个javabean的时候,应该提供属性的setter方法,默认的构造方法,带参数的构造器
IOC和DI的意义
案例一:
需求:编写一个文档管理系统,在系统中有如下的结构;
1.DocumentInterface
readDocument
writeDocument
2.WordDocument是Document的实现类
readDocument
writeDocument
3.ExcelDocument
readDocument
writeDocument
4.pdfDocument
writeDocument
readDocument
做法一:
说明:上述的代码是不完全的面向接口编程
做法二:
说明:在代码段没有出现具体的实现类,完全的面向接口编程
在spring的配置文件中决定了documentManager中的接口实现类是什么。而这个过程和java的代码端是没有任何关系的。
案列二:
需求:把action调用service,service调用dao用spring来完成。
实现:
意义:实现了完全的面向接口编程,在代码端没必要关心一个接口的实现类是什么。