Bean的配置项
id:唯一标识
class:具体是哪一个类(理论上是必须的)
scope:范围
constructor arguments:构造器的参数
properties:属性
Autowiring mode:自动装配模式
lazy-initialization mode:懒加载模式
initialization/destruction method:初始化/销毁的方法
1、作用域(scope值)
singletion:单例 指一个bean容器只存在一份(默认模式)
prototype:每次请求会创建新的实例,destory方式不生效
request:对于request创建新的实例,只在当前request内有效
session:对于session创建新的实例,只在当前session内有效
global session:基于portlet(例如单点登录的范围)的web中有效,如果在web中同session
例:
<bean id="beanScope" class="com.imooc.bean.BeanScope" scope="singleton"></bean>
@Test
public void testSay() {
BeanScope beanScope = super.getBean("beanScope");
beanScope.say();
BeanScope beanScope2 = super.getBean("beanScope");
beanScope2.say();
}
配置了scope=”singleton”后,无论在这里获取了多少个bean的id,实际上都是在同一个Spring IOC容器中得到的一个唯一的实例(因为一直是在同一方法中获取bean),也就是无论获取多少个,其实一直在使用同一个对象。即两次执行say()方法输出对象的hashCode是相同的
<bean id="beanScope" class="com.imooc.bean.BeanScope" scope="prototype"></bean>
@Test
public void testSay() {
BeanScope beanScope = super.getBean("beanScope");
beanScope.say();
BeanScope beanScope2 = super.getBean("beanScope");
beanScope2.say();
}
如果这里配置了scope=”prototype”,那么两次执行,得到就结果就不一样了,也就是说,不是单例,每次请求(使用对象)都会创建一个新的实例
2、生命周期
定义
初始化(initialization method)
使用
销毁(destruction method)
① 初始化:
方法1:实现org.springframework.beans.foctory.InitializingBean接口,覆盖afterPropertiesSet方法。系统会自动查找afterPropertiesSet方法,执行其中的初始化操作
方法2:.配置init-method
例如设置bean中init-method=”init”那么在初始化过程中就会调用相应class指定类的init()方法进行初始化工作
② 销毁(与初始化类似)
方法1:实现org.springframework.beans.foctory.DisposableBean接口,覆盖destory方法。
方法2:配置destroy-method
③ 配置全局初始化、销毁方法(默认配置)
<beans
default-init-method="defaulInit" default-destroy-method="defaultDestory" >
</beans>
注意:
当一个bean配置了init-method 和destroy-method的时候,全局配置default-init-method和default-destroy-method会被覆盖掉。并且,实现初始化和销毁的接口的会比在xml中配置bean的方式更先执行。
- 如果有实现初始化和销毁的接口或者在bean中单独配置的初始化/销毁方法,这个时候可以没有全局配置
- 即使xml中配置了全局配置,但在代码中没有任何实现的话,bean的执行过程也不会失败(没有实现所以没有输出,但不会报错)。也就是说:全局配置的是一个可选的方法(可有可无),bean中如果配置了初始化和销毁,但没有实际代码实现的话,直接输出报错。