我的EventListener
注释没有收到任何春季活动。这是我的代码:
@Component
public class ProxyConfig {
public ProxyConfig() {
System.out.println("I can see this in the console");
}
@EventListener
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
System.out.println("WON'T WORK :-("); // FIXME
}
@EventListener
public void test(ApplicationStartedEvent event) {
System.out.println("WON'T WORK :-("); // FIXME
}
}
这是我的Application
课程:
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(MyApp.class, args);
}
}
根据https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2和https://solidsoft.wordpress.com/2015/09/29/annotation-driven-event-listeners-in-spring-4-2/它必须正常工作,但仍然无法打印我的“不会工作:-(”字符串:(
有什么想法吗?
谢谢!
答案 0 :(得分:5)
您正在收听的两个事件都是在应用程序生命周期的早期发布的。
一旦启动了SpringApplication,就可以尽可能早地发送 ApplicationStartedEvent
- 在环境或ApplicationContext可用之前,但是在注册了ApplicationListener之后#34;。
ApplicationEnvironmentPreparedEvent
"当SpringApplication启动并且环境首次可用于检查和修改时。"
在这两种情况下,事件发布得太早,无法通过注释和应用程序上下文找到侦听器。正如您所观察到的,您可以使用spring.factories
注册您的听众。或者,您可以在SpringApplication
上使用setter方法。