|、定制Bean的生命周期行为
跟踪bean的出生与死亡。
prototype Bean是不存在生命周期行为:生的计划,死的随机。
singleton Bean 一直处于Spring容器的跟踪、管理之下,因此它才具有生命周期行为。
1.创建之后的初始化:初始化一些资源(数据库连接池、网络……)
-- 通过init-method属性来指定。
-- 通过实现InitializingBean接口。
property元素对应的setter方法的优先级几乎是最高的 --> 构造器 --> setter方法 -> 初始化方法。
2. 销毁之前的初始化: 释放它的资源。
-- 通过destory-method属性来指定。
-- 通过实现DisposableBean接口 。
如果要看到Bean的正常销毁,分为2种情况:
-- 对于Java SE项目。必须为Spring容器注册关闭钩子。
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
ctx.registerShutdownHook();
-- 如果Java Web项目,无需你操心。Spring容器会自动正常销毁Bean。
||、作用域不同bean的互相依赖
假如在单例bean中依赖了prototype的bean , 单例bean中依赖的prototype的bean将始终是同一个对象了。
两种方式解决:
1.单例bean中实现ApplicationContextAware,单例bean中就可以取到容器对象
每次需要获取依赖的prototype的bean时候,通过容器取一个即可。
2.look-up方式
参加代码!
跟踪bean的出生与死亡。
prototype Bean是不存在生命周期行为:生的计划,死的随机。
singleton Bean 一直处于Spring容器的跟踪、管理之下,因此它才具有生命周期行为。
1.创建之后的初始化:初始化一些资源(数据库连接池、网络……)
-- 通过init-method属性来指定。
-- 通过实现InitializingBean接口。
property元素对应的setter方法的优先级几乎是最高的 --> 构造器 --> setter方法 -> 初始化方法。
2. 销毁之前的初始化: 释放它的资源。
-- 通过destory-method属性来指定。
-- 通过实现DisposableBean接口 。
如果要看到Bean的正常销毁,分为2种情况:
-- 对于Java SE项目。必须为Spring容器注册关闭钩子。
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
ctx.registerShutdownHook();
-- 如果Java Web项目,无需你操心。Spring容器会自动正常销毁Bean。
||、作用域不同bean的互相依赖
假如在单例bean中依赖了prototype的bean , 单例bean中依赖的prototype的bean将始终是同一个对象了。
两种方式解决:
1.单例bean中实现ApplicationContextAware,单例bean中就可以取到容器对象
每次需要获取依赖的prototype的bean时候,通过容器取一个即可。
2.look-up方式
参加代码!