1.反相控制(IoC Inversion of Control)/依赖注入(DI Depdendency Injection)
Martin Fowler在其文章中提出了“它们反转了哪方面的控制”的问题后,就为IoC起了一个更能说明这种模式特点的新名字"Depdendency Injection"
依赖注入的三种方式:
1)接口注入(interface Injection);
2)Set注入(setter Injection);
3)构造注入(constructor Injection);
2.使用哪种注入方式:
讨论这个问题其实就是在讨论:“要在对象建立时就准备好所有的资源,还是在对象建立好后,使用Set注入来设定”。
3.在Spring中,Bean可以被定义为两种部署模式的一种:singleton 或 no-singleton(prototype) ,默认为singleton模式 。
1)如果一个Bean被定义为singleton ,那么就只有一个共享的实例存在,所有对这个Bean的请求都会返回这个唯一的实例;
2)如果一个Bean被定义为no-singleton(prototype) ,那么对这个Bean的请求都会创建一个新的Bean实例,可以看成类似new的操作;
4.Bean的生命周期:定义、初始化、使用、销毁:
1)定义:通常使用配置文档;
2)初始化:
<1>配置文档中使用init-method属性;
在Bean中增加一个方法init,然后修改config.xml文档指定初始化方法;
<2>实现org.springframework.bean.factory.InitializingBean接口(如果Bean实现了该接口,则它所有的必须的属性被BeanFactory设置后,会自动执行它的afterPropertiesSet()方法);
Bean实现InitializingBean接口,增加一个afterPropertiesSet()方法完成初始化,然后修改config.xml;
这两种方法效果是一样的,但第一种没有把Bean耦合于Spring,所以比较推荐第一种;
3)使用:
<1>使用BeanWrapper
<2>使用BeanFactory
<3>使用ApplicationContext
4)销毁:
<1>在配置文档中通过指定destroy-method属性来完成
在Bean中增加一个方法cleanup(),用来完成销毁工作。然后修改config.xml文档指定销毁方法;
<2>实现org.springframework.bean.factory.DisposableBean
让Bean实现DisposableBean接口,增加一个distory()方法完成销毁,然后修改config.xml;
这两种方法效果是一样的,但第一种没有把Bean耦合于Spring,所以比较推荐第一种;
5.用ref的属性指定依赖,有3种模式:local、Bean、parent
local与Bean最为常用
<1>相同之处,两者都可能用Bean的Id进行参考引用,都可以对同一个XML中的Bean进行参考引用。
<2>不同之处,后者可以用Bean的name进行参考引用,还可以对不同的XML中的Bean进行参考引用。
6.Bean自动装配的5种模式
Bean元素的autuwire属性来指定,共有5种模式,即byName、byType、constructor、autodetect和no
显示的指定依赖,例如property和constructor-arg元素,总会覆盖自动装配。对于大型的应用不鼓励使用自动装配,因为它去除了参考依赖的透明性和清晰性。
7.Bean依赖检查的4种模式
默认不检查依赖关系(借助依赖检查来实现查看Bean的每个属性是否都设定完成的功能)。使用Bean元素的dependency-check属性来指定Bean的依赖检查共有4种模式:simple、object、all、none
8.集合(ex:List(list)、Set(set)、Map(map)、Properties(props)的注入方式:先把要注入的信息注入到集合中,然后再把集合注入到相关Bean中。
9.管理Bean
分别使用BeanWrapper、BeanFactory、ApplicationContext管理Bean。
BeanWrapper封装了Bean的一个行为,提供了设置了获得属性值的功能。通过BeanWrapper可以获得Bean的属性描述、查询只读和可写属性。
BeanFactory实际上是实例化、配置和管理众多Bean的容器。这些Bean会彼此合作,从来彼此产生依赖。
ApplicationContext建立在BeanFactory之上,并增加了其它功能,例如对国际化的支持、获取资源和事件传递等。ApplicationContext是BeanFactory的完全超集。
三种比较:BeanWrapper其实没有用到Spring配置文件,而且只能对单个Bean进行设定。常用的是BeanFactory和ApplicationContext。
10.ApplicationContext的更强功能(在BeanFactory的基本功能之外的其他功能)