SpringBoot EventListener不接收事件

时间:2016-07-20 17:51:37

标签: java spring spring-boot event-listener

我的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-2https://solidsoft.wordpress.com/2015/09/29/annotation-driven-event-listeners-in-spring-4-2/它必须正常工作,但仍然无法打印我的“不会工作:-(”字符串:(

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

您正在收听的两个事件都是在应用程序生命周期的早期发布的。

一旦启动了SpringApplication,就可以尽可能早地发送

ApplicationStartedEvent - 在环境或ApplicationContext可用之前,但是在注册了ApplicationListener之后#34;。

发布了

ApplicationEnvironmentPreparedEvent"当SpringApplication启动并且环境首次可用于检查和修改时。"

在这两种情况下,事件发布得太早,无法通过注释和应用程序上下文找到侦听器。正如您所观察到的,您可以使用spring.factories注册您的听众。或者,您可以在SpringApplication上使用setter方法。