Bean的 依赖注入 通常表现为如下两种形式:
① 属性:通过<property.../>元素配置,对应设值注入。
② 构造器参数:通过<constructor-arg.../>元素指定,对应构造注入。
通常情况下,Spring在实例化容器时,会校验beanfactory中每一个Bean的配置,这些校验包括:
① Bean引用的依赖Bean是否指向一个合法的Bean。
② Bean的普通属性值是否获得了一个有效值。
对于singleton作用域的Bean,如果没有强行取消其预初始化行为,系统会在创建Spring容器时预初始化所有singleton Bean,与此同时,该Bean所依赖的Bean也被一起实例化。
beanfactory与ApplicationContext实例化容器中Bean的时机不同:前者等到程序需要Bean实例时才创建Bean,而后者在容器创建ApplicationContext实例时,会预初始化容器中的全部Bean。
注意:
因为采用ApplicationContext作为Spring容器,创建容器时会同时创建容器中所有singleton作用域Bean,因此可能需要更多的系统开销。但一旦创建成功,应用后面的响应速度更快。因此对于普通的JavaEE应用,推荐使用ApplicationContext作为Spring容器。 |
实际上,Spring允许为singleton作用域的Bean指定lazy-init=“true”,该属性将改变singleton Bean实例的默认行为,强制取消该Bean实例预初始化。
Spring可以为任何Java对象注入任何类型的属性------只要该Java对象为该属性提供了对应的setter方法即可。
由于Java实例的属性值可以是各种数据类型,除了基本类型、字符串类型等,还可以是其他Java实例,也可以是容器中其他Bean的实例,甚至是Java集合、数组等,所以Spring允许通过如下元素为Bean实例的属性指定值:
① value:用于指定字符串类型,基本类型的属性值。
② ref:属性值是容器中的另一个Bean实例。
③ bean:注入嵌套Bean。
④ list、set、map和props:注入集合值。
原文链接:https://www.f2er.com/javaschema/286134.html