读书人

配备Spring管理的bean的作用域

发布时间: 2012-12-24 10:43:13 作者: rapoo

配置Spring管理的bean的作用域
<bean id="persionService" scope="prototype"></bean>


.singleton 在每个Spring Ioc容器中一个bean定义只有一个对象实例,默认情况下会在容器启动时或实例容器时初始化bean但可以指定Bean节点的lazy-init="true" 来延迟初始化bean,这时候,只有第一次获取bean才会初始化如:
<bean id="xxx" lazy-init="true"/>如果想对所有的bean都应用延迟初始化,可以在根节点beans设置default-lazy-init="true"/>
若没有配置 lazy-init="default"
注: lazy-init="true"尽可能的不要使用,因为希望在应用启动的时候观察控制台打印的信息对于业务bean完成化,若配置此属性也就只能在运行期发现这个错误,除非完成特殊操作否则尽量少用

.prototype
每次从容器获取bean都是新的对象
.request
.session
.global session



其他
若在业务bean中定义一个初始化方法init() 如:打开数据库连接或打开某些资源 需要Spring容器对这个bean初始化时就需要执行此方法这是通过容器反射技术来进行调用。配置如下:
<bean id="persionService" scope="singleton" lazy-init="default" init-method="init" ></bean>


若在业务bean中定义一个销毁方法detory() 如:关闭数据库连接或关闭某些资源 需要Spring容器对这个bean销毁之前先执行销毁方法
配置如下:



注:bean在spring容器中若没有进行人为操作或人为删除它默认的情况下 它一直在spring中,所以只有在Spring容器关闭,而bean才被销毁


这是需要一个AbstractApplicationContext抽象类,而它也被ClassPathXmlApplicationContext所继承,所以我们通过AbstractApplicationContext这个抽象类 来引用bean的实例
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
//来正常关闭Spring容器
ctx.close();

读书人网 >编程

热点推荐