Spring的Bean生命周期内的callback方法和Spring容器启动关闭时的callback方法
2014-11-05 00:00
459 查看
通过Spring管理的bean,在其生命周期内可以配置被Spring调用的callback方法一般有两种:通过实现Spring提供的特点接口和通过配置callback方法.(如果bean是prototype的话,由于其销毁不被Spring管理,其销毁方法不会被调用)
1,通过实现Spring提供的特点接口:通过实现InitializingBean接口,Spring容器会在初始化bean的时候调用该bean的afterPropertiesSet方法,通过实现DisposableBean接口,Spring容器会在销毁bean的时候调用该bean的destroy()方法.
例:
Spring还提供一种在最上层定义初始化和销毁方法,只要保持Bean的初始化和销毁方法按照一定的命名规范定义这些方法,就不需要为每一个bean单独指定初始化和销毁方法了.对于不存在这些方法的bean,Spring初始化这些bean的时候就忽略这种配置.
Spring容器启动和关闭的时候,配置对bean的callback方法通常用来配置后台程序,在启动后一直运行(如对MQ进行轮询等等),通过实现Spring提供的接口:Lifecycle,phased或者SmartLifecycle来实现(其中SmartLifecycle继承了Lifecycle和phased).
在Spring启动和关闭时被调用的callback方法:
例:
isRunning返回的值决定是否在Spring关闭的时候运行stop(Runnable arg0)方法,ture的话则运行.
getPhase返回的值决定启动的顺序,值越小越先启动,越后关闭,用于调整在有多个这样的bean的时候,这些bean之间启动的优先级.
*需要设置ctx.registerShutdownHook(),Spring容器关闭的时候才会调用stop方法.
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("conf/lfCycleAppcontext.xml");
ctx.registerShutdownHook();
1,通过实现Spring提供的特点接口:通过实现InitializingBean接口,Spring容器会在初始化bean的时候调用该bean的afterPropertiesSet方法,通过实现DisposableBean接口,Spring容器会在销毁bean的时候调用该bean的destroy()方法.
例:
public class InitDisposeBean implements InitializingBean,DisposableBean { protected static final Log log = LogFactory.getLog(InitDisposeBean.class); @Override public void afterPropertiesSet() throws Exception { log.info("afterPropertiesSet"); } @Override public void destroy() throws Exception { log.info("destroy"); } public void test() { log.info("test"); } } <bean id="InitDisposeBean" class="com.test.spring.lifecycle.InitDisposeBean" />2,通过配置文件指定callback方法:
public class InitDisposeCfgBean { protected static final Log log = LogFactory.getLog(InitDisposeCfgBean.class); public void init() { log.info("init"); } public void cleanup() { log.info("cleanup"); } public void test() { log.info("test"); } } <bean id="InitDisposeCfgBean" class="com.test.spring.lifecycle.InitDisposeCfgBean" init-method="init" destroy-method="cleanup"/>通常推荐使用第二种方法,这种做法更符合IoC的思想,并且不实现Spring的接口,代码独立于Spring.如果实现InitializingBean的同时指定init-method,InitializingBean的afterPropertiesSet方法会在init-method指定的方法之前调用.(没有理由同时这么做...)
Spring还提供一种在最上层定义初始化和销毁方法,只要保持Bean的初始化和销毁方法按照一定的命名规范定义这些方法,就不需要为每一个bean单独指定初始化和销毁方法了.对于不存在这些方法的bean,Spring初始化这些bean的时候就忽略这种配置.
<beans default-init-method="init" default-destroy-method="cleanUp"> <bean ....> </beans>在
Spring容器启动和关闭的时候,配置对bean的callback方法通常用来配置后台程序,在启动后一直运行(如对MQ进行轮询等等),通过实现Spring提供的接口:Lifecycle,phased或者SmartLifecycle来实现(其中SmartLifecycle继承了Lifecycle和phased).
在Spring启动和关闭时被调用的callback方法:
例:
public class LfCycleBean1 implements SmartLifecycle{ protected static final Log log = LogFactory.getLog(LfCycleBean1.class); private boolean isRunning = false; @Override public boolean isAutoStartup() { // TODO Auto-generated method stub return true; } @Override public void stop(Runnable arg0) { arg0.run(); isRunning = false; log.info("stop Runnable"); } @Override public boolean isRunning() { // TODO Auto-generated method stub return isRunning; } @Override public void start() { isRunning = true; log.info("start "); } @Override public void stop() { isRunning = false; log.info("stop"); } @Override public int getPhase() { return -1; } } <bean id="LfCycleBean1" class="com.test.spring.lifecycle.LfCycleBean1" />isAutoStartup返回的值决定是否在Spring启动的时候运行start方法,ture的话则运行.
isRunning返回的值决定是否在Spring关闭的时候运行stop(Runnable arg0)方法,ture的话则运行.
getPhase返回的值决定启动的顺序,值越小越先启动,越后关闭,用于调整在有多个这样的bean的时候,这些bean之间启动的优先级.
*需要设置ctx.registerShutdownHook(),Spring容器关闭的时候才会调用stop方法.
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("conf/lfCycleAppcontext.xml");
ctx.registerShutdownHook();
相关文章推荐
- Spring的Bean生命周期内的callback方法和Spring容器启动关闭时的callback方法
- 随web容器启动Java类,调用spring容器中的的bean及其方法
- spring中bean的作用域与懒加载及初始化方法和销毁方法以及spring容器的正常关闭
- 随web容器启动Java类,调用spring容器中的的bean及其方法
- spring中bean的作用域与懒加载及初始化方法和销毁方法以及spring容器的正常关闭
- spring的bean的生命周期 回调方法
- spring容器生存的bean的几种生命周期(详细讲解)
- spring心得2--bean的生命周期@Spring监听器的作用@Spring初始化容器案例分析@web项目使用
- Spring中bean的生命周期和方法注入和事务
- spring—容器启动载入bean过程
- 从spring容器中得到bean_使用类构造器实例化_使用静态工厂方法实例化_使用实例工厂方法实例化_例子
- Spring容器实例化Bean方法
- spring心得2--bean的生命周期@Spring监听器的作用@Spring初始化容器案例分析@web项目使用
- 获取Spring 容器中bean的方法
- spring心得2--bean的生命周期@Spring监听器的作用@Spring初始化容器案例分析@web项目使用
- 【spring】容器启动后马上调用java 类的方法
- Spring-Bean的销毁使用destroy-method()方法无效解决方案(容器!附源码)
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- SPRING中BEAN注入成功,可是启动WEB服务器,调用方法时,BEAN全是空,NullpointerException