



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