我正在尝试在一个spring单例bean中启动和停止一个quartz调度器,.But后处理被调用了两次,而predestroy根本没有被调用。This链接说,由于代理,自然会被调用两次,但这会导致后期构造方法中出现异常。我只想在加载单例bean之后调用postConstruct一次。
发布于 2011-12-27 04:48:45
我编写了一个上下文加载器侦听器,并更改了bean侦听器.So,我只能初始化bean一次。
<listener>
<listener-class>
CustomContextLoaderListener
</listener-class>
</listener>
public class CustomContextLoaderListener extends
org.springframework.web.context.ContextLoaderListener{
Scheduler scheduler;
@Override
public void contextInitialized(javax.servlet.ServletContextEvent event) {
try{
super.contextInitialized(event);
this.scheduler= WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()).getBean(Scheduler.class);
}
@Override
public void contextDestroyed(ServletContextEvent event){
super.contextDestroyed(event);
scheduler.stopSchedulers();
}发布于 2011-12-20 23:20:09
您为什么不尝试使用init-method或尝试实现初始化bean。这些为postConstruct提供了替代方法。
当spring bean被卸载时,即当容器关闭时,或者ConfigurableApplicationContext方法中的close()方法通过其他方式被调用时,preDestroy就会被调用。
https://stackoverflow.com/questions/8576968
复制相似问题