Spring的事件和監聽器


Application下抽象子類ApplicationContextEvent的下面有4個已經實現好的事件 

  1. ContextClosedEvent(容器關閉時) 
  2. ContextRefreshedEvent(容器刷新是) 
  3. ContextStartedEvent(容器啟動時候) 
  4. ContextStoppedEvent(容器停止的時候) 

同樣,這四個事件都繼承了ApplicationEvent,如果我們想自定義事件,也可以通過繼承ApplicationEvent來實現 

使用示例:

1.新建一個MyEvent的類,繼承ApplicationEvent抽象類

public class MyEvent extends ApplicationEvent {
    //存放構造器送入的值
    private String msg;
    //構造器參數可以隨意設置,這里為了方便調試,設置為字符串
    public MyEvent(String msg) {
        super(msg);
        this.msg=msg;
    }
    //自定義一個方法,這個方法也可以隨意寫,這里也是測試用
    public void myevent(){
        System.out.println("********My event**************");
        System.out.println(msg);
        System.out.println("*******************************");
    }
}

2.新建一個監聽器MyListener

//注入IOC容器中
@Service("myListener")
public class MyListener implements ApplicationListener<ApplicationEvent> {
    //調用ApplicationContext.publishEvent方法時會觸發執行該方法
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        //判斷事件為MyEvent時候執行
        if(event instanceof MyEvent){
            //強制轉換
            MyEvent evt=(MyEvent) event;
            //執行自定義事件中的自定義方法
            evt.myevent();
        }
    }

}

3.在測試類中發布通知publishEvent;

public class Test {
  public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext ("classpath: applicationContext.xml");
      MyEvent event = new MyEvent ("hello");
     context.publishEvent(event);
   }
}

********My event**************

hello

*******************************

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM