发表时间:2009-09-10
最后修改:2009-09-15
依赖注入--如果A依赖于B,则B实例不再由A负责生成,而有容器负责生成,并注入给A实例,因此称为依赖注入,也称为控制反转。
配置依赖
根据注入方式的不同,
bean的依赖注入通常表现为如下两种形式:
1,属性:通过property属性来指定对应的设值注入。
2,构造器参数:通过constructor-arg属性来指定对应的构造注入。
在Spring在实例化BeanFactory时,通常会校验BeanFactory中的每一个Bean的配置。
这些校验包括:
1.bean引用的合作者指向一个合法的bean.
2.对于被设置为pre-instantiated的bean的singleton行为,Spring会在创建BeanFactory时,同时实例化bean.实例化bean时,也会将它所依赖的bean一起实例化。
此外,BeanFactory与ApplicationContext实例化容器中的bean的时机不同:前者在程序需要bean实例时才创建Bean;而后者在加载ApplicationContext实例时,会自动实例化容器中的全部bean.
ApplicationContext是默认预实例化singleton bean。ApplicationContext实例化过程比BeanFactory时间和内存占用率大,但可以在ApplicationContext创建时就检验出配置错误。当然可以通过lazy-load属性为“true”来改变ApplicationContext的默认行为!
bean的依赖通常可以接受如下元素指定值:
1.value.
2.ref.
3.bean.
4.list.set.map.以及props.
A.首先来看看value元素。
value元素用于确定字符串参数。XML文档解析器解析以String解析出这些数据,然后将这些参数由PropertyEditors完成转换(从java.lang.String类型转换为所需的参数类型)。
B.接着是ref元素
如果需要为bean注入的属性是容器中的某个bean实例,推荐使用ref。
ref元素通常有两个属性:
1.bean
2.local
bean用于指定在不同一个xml配置文件中的bean;
local用于指定同一个xml配置文件中的其他bean,并且local属性值只能是其他bean的id属性,让Spring在解析XML时,验证bean的名称。
C.bean元素
如果某个bean的依赖bean不想被Spring容器直接访问,则可以使用嵌套bean。
嵌套bean只对嵌套它的外部bean有效,而Spring容器无法直接访问嵌套bean,因此嵌套bean无需id属性。
嵌套bean的配置形式,保证嵌套bean不能被容器访问,提高了程序的内聚性。
D.list,set,map,以及props元素
list,set,map和props元素分别用来设置类型为List,Set,Map和Properties的属性值,用来为bean注入集合值。
map元素entry的值以及set元素的值都可以使用如下元素:
1.vlaue:确定基本数据类型值或字符串类型值。
2.ref:确定另外一个bean为属性值。
3.bean:确定一个嵌套bean为属性值。
4.list,set,map,以及props:确定集合值为属性值。