在春季启动时执行方法
当应用程序第一次启动时,是否有Spring 3的特性来执行某些方法? 我知道我可以使用@Scheduled注释来设置一个方法,它会在启动后立即执行,但它会定期执行。
谢谢。
如果通过“应用程序启动”,你的意思是“应用程序上下文启动”,那么是的,有很多方法可以做到这一点,最简单的(对于单身bean,无论如何)是用@PostConstruct
注释你的方法。 看看链接,看看其他选项,但总的来说它们是:
@PostConstruct
注解的方法 afterPropertiesSet()
由InitializingBean
回调接口定义 从技术上讲,这些都是钩入bean生命周期,而不是上下文生命周期,但在99%的情况下,这两者是等价的。
如果您需要专门挂接上下文启动/关闭,则可以实现Lifecycle
界面,但可能不需要。
这很容易用ApplicationListener
完成。 我得到这个来听取Spring的ContextRefreshedEvent
:
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class StartupHousekeeper implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(final ContextRefreshedEvent event) {
// do whatever you need here
}
}
应用程序侦听器在Spring中同步运行。 如果你想确保你的代码只执行一次,只需在组件中保留一些状态即可。
UPDATE
与春天开始4.2+,你也可以使用@EventListener
注释观察ContextRefreshedEvent
(感谢@bphilipnyc指出这一点):
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class StartupHousekeeper {
@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() {
// do whatever you need here
}
}
在Spring 4.2中,你现在可以简单地做到:
@Component
class StartupHousekeeper {
@EventListener(ContextRefreshedEvent.class)
void contextRefreshedEvent() {
//do whatever
}
}
链接地址: http://www.djcxy.com/p/50897.html