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 应用上下文处理。

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