Spring中的事件機制
阿新 • • 發佈:2020-10-20
Spring中的事件機制
Spring對事件機制也提供了支援,一個事件被髮布後,被對應的監聽器監聽到,執行對應方法。
Spring內已經提供了許多事件,ApplicationEvent
可以說是Spring事件的頂級父類。
ApplicationListener
是監聽器的頂級介面,事件被觸發後,onApplicationEvent方法
就會執行。
如監聽容器重新整理的一個監聽器:
@Component public class AppLister implements ApplicationListener<ApplicationEvent> { @Override public void onApplicationEvent(ApplicationEvent event) { // TODO Auto-generated method stub if(event instanceof ContextRefreshedEvent) { System.out.println("監聽到app啟動"); } } }
自定義事件
自定義事件需要滿足以下條件:
1、自定義一個事件類,繼承Spring中的事件類。
2、自定義一個監聽器,實現Spring中的監聽器以及對應方法。
3、釋出事件
事件類
public class MyEvent extends ApplicationEvent{ private String msg; public MyEvent(Object source, String msg) { super(source); this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
監聽器
@Component
public class MyLister implements ApplicationListener<MyEvent>{
public void onApplicationEvent(MyEvent myEvent) {
String msg = myEvent.getMsg();
System.out.println("監聽到訊息: "+msg);
}
}
測試
@Configuration @ComponentScan("event")//掃描所有bean public class EventConfig { } //釋出者,內部呼叫Spring容器,可以不實現,直接使用容器即可 @Component public class MyPublisher { @Autowired ApplicationContext context; public void publish(String msg) { context.publishEvent(new MyEvent(this, msg)); } } //測試類 public class EventTest { ApplicationContext context; @Test public void test(){ context=new AnnotationConfigApplicationContext(EventConfig.class); MyPublisher publisher = context.getBean(MyPublisher.class); publisher.publish("Hello msg"); } @Test public void test2(){ context=new AnnotationConfigApplicationContext(EventConfig.class); context.publishEvent(new MyEvent(this,"ok ok")); } } 監聽到訊息: ok ok