Bean的生命周期
- 名称:init-method,destroy-method
- 类型:属性
- 归属:Bean标签
- 作用:定义ben对象在初始化或销毁时完成工作
- 取值:bean对应的类中对应的方法名
- 规则:
- 当scop=“singleton”单例时,spring容器中且有且仅有一个对象,init方法在创建容器时仅执行一次
- 当scop=“prototype”为非单例时,spring容器要创建同一类型的多个对象,itit方法会在创建每个对象时执行一次
- 当scop=“singleton”单例时,关闭容器会导致bean实例被销毁,调用destroy方法一次
- 当scop="prototype"为非单例时,对象的销毁由垃圾回收机制gc()控制,destroy不会执行,spring只负责创建,而销毁不会由spring来管理
依赖注入
set注入(主流)
- 名称:property
- 类型:标签
- 归属:bean标签
- 作用:使用set方法的形式为bean提供资源
- 基本属性:
<bean>
<property name="propertyName" value="propertyValue" ref="beanId">
</bean>
name:对应bean中的属性名,要求该属性必须提供可访问的set方法
value:设定非引用类型属性对应的值,不能与ref同时使用,可以是八大数据类型和string
ref:设定引用类型属性对应的值,不能与value同时使用
构造器注入
-
名称:constructor-arg
-
类型:标签
-
归属:bean标签
-
作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作
<bean> <constructor-arg name="argsName" value="argsValue"> </bean> name:对应bean中的构造方法所携带的参数名 value:设定非引用类型构造方法参数对应的值,不能与ref同时使用 注意:一个bean中科院有多个constructor-arg标签
集合类型数据注入
-
名称:array,list,set,map,props
-
类型:标签
-
归属:property标签或constructor-arg标签
-
作用:注入集合数据类型属性
ApplicationContext和BeanFactory有什么区别?
1.BeanFactory创建bean采用延迟加载形式,也就是说你需要getBean()才会加载
2.ApplicationContext创建Bean默认采用立即加载,ApplicationContext继承了BeanFactory
如何控制Bean的加载顺序?
使用@DependsOn即可控制Bean的加载顺序
- 配置在方法上,将优先于@Bean配置的bean进行加载
- 配置在类上,将优先于当前类中所有@Bean配置的Bean进行加载
- 配置在类上,将优先于@Compent等配置的Bean进行加载
- 相关属性:value(默认),设置当前bean所依赖的bean的id