您的位置:首页 > 编程语言 > Java开发

Spring Bean的配置项:作用域与生命周期

2017-02-01 12:43 417 查看

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中如果配置了初始化和销毁,但没有实际代码实现的话,直接输出报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: