我的EventListener
批注未收到任何 Spring 活动。这是我的代码:
@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/,它必须可以工作,但是仍然无法打印我的“WO N'T WORK :-(” String :(
任何想法?
谢谢!
最佳答案
您正在侦听的两个事件都在应用程序的生命周期的早期发布。ApplicationStartedEvent
的发送是“尽可能早地在SpringApplication启动后发送-在Environment或ApplicationContext可用之前,但在ApplicationListeners已注册之后”。ApplicationEnvironmentPreparedEvent
在“启动SpringApplication且首先可用于检查和修改环境”时发布。
在这两种情况下,事件都发布得太早,以至于无法通过注释和应用程序上下文找到侦听器。如您所见,您可以使用spring.factories
注册您的监听器。另外,您可以在SpringApplication
上使用setter方法。