public class MyApplicationListener implements ApplicationListener<ApplicationEvent>{
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        System.out.println("收到事件:" + event);
    }
}
@Configuration
public class ConfigurationBean {
    @Bean
    public MyApplicationListener myApplicationListener() {
        return new MyApplicationListener();
    }
    
    @Bean
    public Person person() {
        return new Person();
    }
}
public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(
                ConfigurationBean.class);
        applicationContext.publishEvent(new ApplicationEvent("发布事件") {
        });
        applicationContext.close();
        
    }

控制台打印

person construct ....
收到事件:org.springframework.context.event.ContextRefreshedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@1324409e: startup date [Mon Jun 10 23:01:38 CST 2019]; root of context hierarchy]
收到事件:com.suxiaodong.annotation.MainTest$1[source=发布事件]
收到事件:org.springframework.context.event.ContextClosedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@1324409e: startup date [Mon Jun 10 23:01:38 CST 2019]; root of context hierarchy]

 @EventListener注解到方法上,可不用实现ApplicationListener接口也能发布事件

原理:EventListenerMethodProcessor  implements SmartInitializingSingleton

public class MyApplicationListener {
    @EventListener(value={ApplicationEvent.class})
    public void doSomething(ApplicationEvent source) {
        System.out.println("source:" + source + "发布事件:doSomething");
    }
}
@Configuration
public class ConfigurationBean {
    @Bean
    public MyApplicationListener myApplicationListener() {
        return new MyApplicationListener();
    }
    
    @Bean
    public Person person() {
        return new Person();
    }
}

打印:

person construct ....
source:org.springframework.context.event.ContextRefreshedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@1324409e: startup date [Mon Jun 10 23:39:38 CST 2019]; root of context hierarchy]发布事件:doSomething
source:com.suxiaodong.annotation.MainTest$1[source=发布事件]发布事件:doSomething
source:org.springframework.context.event.ContextClosedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@1324409e: startup date [Mon Jun 10 23:39:38 CST 2019]; root of context hierarchy]发布事件:doSomething