1.IoC和DI
IoC(Inverse of Control:控制反转,Spring的原作者Rod Johnson): A组件(service)需要调用B组件(dao),成为A组件依赖B组件。方式一、new一个;方式二、通过工厂获取一个;方式三、由容器提供了一个。方式一、二(传统)需要A组件主动去获取;方式三方式A组件(service)只要被动接收依赖的对象(dao)就行了——从A组件的角度来看:A组件由原来的主动获取变成被动接受,控制被反过来 —— 叫控制反转。
DI(Dependency Injection:依赖注入): Martine Fowler。——从容器的角度来看:容器将被依赖B组件(dao)注入给A组件(service) ——依赖注入。正因为有容器的依赖注入,A组件才得以接受容器的注入,实现控制反转。
2.依赖注入
依赖注入可分为3种:
- 接口注入。很少使用。
- 设值注入:就是通过property元素控制调用setter方法,就是所谓的设值注入。
- 构造注入:就是constructor-arg控制调用有参数的构造器,由构造器来注入被依赖组件。就是所谓的构造器注入。
bean元素 :驱动使用new调用构造器。 默认它总是调用无参数的构造器。如果想控制它调用有参数的构造器,就需要在<bean…/>元素里添加<constructor-arg…/>子元素,每个该元素代表一个构造器参数。
property元素: 驱动它调用setter方法。 对象创建出来之后,立即就会被调用。
constructor-arg元素: 驱动调用有参数的构造器。
构造注入和set注入的区别:
构造注入 在对象建立时就准备好所有资源,如果要建立的对象关系很多(参数多),
使用构造注入会在建构函式上留下一长串参数,且不易记忆,但是如果想要让一些数据成员或资源变为只读或私有,可以选择构造注入。
set注入 在对象建立好后,使用set注入内容,可以有明确的名称,可以了解注入的对象是什么,setXXX当然比Constructor上某个参数的位置代表某个对象好,但是使用set注入由于提供了setXXX方法,所以不能保证相关的数据成员或资源在执行时不会被更改设定
总结:如果想要让一些数据成员或资源变为只读或私有,可以选择构造注入。大多数时候都是使用set注入。
2.1设值注入
User类:
1 | public class User { |
Test类:
1 | public class Test { |
applicationContext.xml:
1 |
|
2.2构造注入
Test类:
1 | public class Test { |
applicationContext.xml:
1 |
|
3.Bean别名
1 |
|
4.简化配置
1 |
|
5.嵌套bean
1 |
|
6.bean的自动装配
1 |
|
7.集合属性的注入
User类:
1 | public class User { |
xml:
1 |
|
8.抽象bean
1 |
|