在春季启动时执行方法
是否有任何 Spring 3 功能可以在应用程序首次启动时执行某些方法?我知道我可以做一个用注释设置方法的技巧,它在启动后立即执行,但随后它会定期执行。@Scheduled
是否有任何 Spring 3 功能可以在应用程序首次启动时执行某些方法?我知道我可以做一个用注释设置方法的技巧,它在启动后立即执行,但随后它会定期执行。@Scheduled
如果“应用程序启动”是指“应用程序上下文启动”,那么是的,有很多方法可以做到这一点,最简单的方法(对于单例bean,无论如何)是用 来注释你的方法。查看链接以查看其他选项,但总而言之,它们是:@PostConstruct
@PostConstruct
afterPropertiesSet()
由回调接口定义InitializingBean
从技术上讲,这些是bean生命周期的钩子,而不是上下文生命周期,但在99%的情况下,两者是等效的。
如果您需要专门挂接到上下文启动/关闭,那么您可以改为实现生命周期
接口,但这可能是不必要的。
这可以通过 .我把它弄到工作听春天的:ApplicationListener
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 中同步运行。如果要确保代码只执行一次,只需在组件中保留一些状态即可。
更新
从Spring 4.2 +开始,您还可以使用注释来观察(感谢@bphilipnyc指出这一点):@EventListener
ContextRefreshedEvent
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
}
}