spring的事件通知

一、概念

事件源:事件的產生者,任何一個EventObject都必須擁有一個事件源。

事件監聽器註冊表:組件或者框架的事件監聽器不可能漂浮在空中,而必須有所依存。也就是說組件或者框架必須提供一個地方保存事件監聽器,這便是事件監聽器註冊表。一個事件監聽器註冊到組件或者框架中,其實就是保存在事件監聽器註冊表中。當組件和框架中的事件源產生事件時,就會通知這些位於事件監聽器註冊表中監聽器。

事件廣播器:它是事件和事件監聽器溝通的橋樑,負責把事件通知給事件監聽器。

二、代碼例子

事件源

public class SpringTestEvent  extends ApplicationEvent {
    private String message;
    public SpringTestEvent(Object source,String message) {
        super(source);
        System.out.println("事件源=="+message);
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}

事件廣播器:操作時調用sendMsg(),就可以執行。

@Component
public class SpringTestBean  implements ApplicationContextAware {

    @Autowired
    ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
    public void sendMsg(){
        String msg ="455668666";
        System.out.println("======"+msg);
        applicationContext.publishEvent(new SpringTestEvent(this ,msg));
    }
}

事件監聽器註冊表:獲取對應的監聽器進行操作

@Component
public class SpringTestListener implements ApplicationListener<SpringTestEvent> {

    @Override
    public void onApplicationEvent(SpringTestEvent springTestEvent) {
        System.out.println("事件監聽者:===="+springTestEvent.getMessage());
    }
}

三、代碼邏輯

1、項目加載refresh()初始化bean容器,初始化應用上下文事件廣播器、註冊事件監聽器、完成刷新併發布容器刷新事件。

2、初始化事件源 new SpringTestEvent(applicationContext ,msg)

3、使用ApplicationContext的方法publishEvent()進行事件廣播.

4、 在AbstractApplicationContext獲取 ApplicationEventMulticaster事件廣播器

5、根據事件監聽器註冊表 遍歷獲取自定義的SpringTestListener,監聽到事件源

 

核心:bean容器的初始化,ApplicationContext 應用上下文處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章