我的web應用程序的Spring應用程序上下文啓動後需要運行一個方法。我查看了this question,但是它引用了Java Servlet啓動,並且沒有一個Spring的東西在那個時候運行。僅在Spring應用程序上下文啓動時運行一個方法?
是否有我可以掛鉤的「SpringContext.onStartup()」方法?
我的web應用程序的Spring應用程序上下文啓動後需要運行一個方法。我查看了this question,但是它引用了Java Servlet啓動,並且沒有一個Spring的東西在那個時候運行。僅在Spring應用程序上下文啓動時運行一個方法?
是否有我可以掛鉤的「SpringContext.onStartup()」方法?
使用類似下面的代碼:
@Component
public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(final ContextRefreshedEvent event) {
// do your stuff here
}
}
當然StartupListener將需要在組件中掃描的達到
採取不過請注意,如果您的應用程序使用多個上下文(例如根上下文和一個web上下文),這個方法將針對每個上下文運行一次。
你可以寫聽衆是這樣的:
@Component
public class SpringContextListener implements ApplicationListener<ApplicationEvent> {
public void onApplicationEvent(ApplicationEvent arg0) {
System.out.println("ApplicationListener");
};
}
只需添加組件掃描路徑是這樣的:
<context:component-scan base-package="com.controller" />
看一看Better application events in Spring Framework 4.2
@Component
public class MyListener {
@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
...
}
}
註釋的方法使用@EventListener自動註冊與簽名匹配的ApplicationListener的方法。 @EventListener是一個核心註釋,它以與@Autowired等類似的方式進行透明處理:對於java config和現有的上下文:annotation-driven />元素不需要額外的配置就可以完全支持它。
你想要的是一個'ApplicationListener'。 –