Spring中的事件机制

Spring中的事件机制

Spring中的事件机制是一个观察者模式的实现.观察者模式就是一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.Spring的事件由ApplicationContext发布

ApplicationEvent

ApplicationEvent充当事件的角色,这是一个Abstract实现,所有的事件必须继承自该类,约束子类实现的体现,我们可以实现这个类定义自己的事件

image_1babkj7vg14en1oeaq7a158n1f9dt.png-9.2kB
image_1babkj7vg14en1oeaq7a158n1f9dt.png-9.2kB

Spring中默认存在的事件有

  • ContextStartedEvent:ApplicationContext启动后触发的事件
  • ContextStoppedEvent:ApplicationContext停止后触发的事件
  • ContextRefreshedEvent:ApplicationContext初始化或刷新完成后触发的事件
  • ContextClosedEvent:ApplicationContext关闭后触发的事件
  • [x] WEB项目里会存在两个容器,一个是rootApplicationContext ,另一个就是projectName-servlet context,这个时候会触发两次ContextRefreshedEvent,注意rootApplicationContext没有parent,可以以此来区分

ApplicationListener

ApplicationListener充当监听器的角色

image_1babl33qv1rno1rcobrs145616339.png-6.3kB
image_1babl33qv1rno1rcobrs145616339.png-6.3kB

想要监听相关事件只要实现ApplicationListener接口,并将该类注册到Spring中托管就可以,接口中的事件可以是Spring中的事件也可以是自定义实现的ApplicationEvent的子类

image_1babluvklnto100k16nd10ohq2q1g.png-21.3kB
image_1babluvklnto100k16nd10ohq2q1g.png-21.3kB

ApplicationEventMulticaster

ApplicationEventMulticaster充当事件发布的角色,ApplicationContext通过带调用

初始化


image_1babloov85nv1p5c15l9cc6mrl13.png-79.3kB
image_1babloov85nv1p5c15l9cc6mrl13.png-79.3kB

添加监听器,这里所有被spring托管的Bean中的ApplicationListener实现都会被注册


image_1babmcsm81t9anu613k7gir132g1t.png-21kB
image_1babmcsm81t9anu613k7gir132g1t.png-21kB

对于我们自定义的事件需要我们在条件满足的情况下手动触发

    @Resource
    private ApplicationContext applicationContext;

    public void process() {
        applicationContext.publishEvent(new DemoEvent(applicationContext));
    }

提交事件后,ApplicationEventMulticaster会触发相关的ApplicationListener进行响应

异步

关于异步,给一个线程池就可以,可以配置全局的线程池,这个全局会影响所有的事件,不推荐.推荐在监听器内部添加线程池,多线程响应事件.

监听器

    private static ExecutorService executor = Executors.newSingleThreadExecutor();

    @Override
    public void onApplicationEvent(DemoEvent event) {
        executor.execute( do something);
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,926评论 6 342
  • 标准定制事件 在ApplicationContext中,事件的处理是通过ApplicationEvent和Appl...
    braveheart075阅读 719评论 0 0
  • 大学两年读了大概 200 本书,为什么感觉读书的价值还是没有体现出来? 看书的方法,不仅要看作者写了什么(一层),...
    英伦小兔子阅读 267评论 0 2
  • 有人说想要认识这世界,要么读万卷书,要么行万里路。但在这网络盛行的时代,世界纷繁而嘈杂,社会的浮躁,内心的不安,想...
    贝希子阅读 322评论 0 0