我的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-2https://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方法。

07-24 09:26