
springboot监听器
最近在项目中引入了一个事务提交后的监听器,现对这些功能做一个阶段性的总结:
就是用来监听程序执行的。监听器可以做什么事?可以监听程序执行,使程序在不同的阶段做不同的事情,并且与程序主业务逻辑解耦.web监听器就是Servlet中特殊的类,他们能帮助开发者监听web中的特定事件,比如ServletContext、HttpSession、ServletRequest的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控等等。
广播器(ApplicationEventMulticaster):用来把发布的事件广播给支持当前事件的监听器。
事件(ApplicationEvent):用来定义事件。
小知识:Spring boot项目启动时会扫描项目中的监听器并加载到广播器中,所以广播器广播的时候能获取到所有的监听器。 Spring boot识别项目中的监听器规则是:@EventListener注解标注的方法,ApplicationListener接口的实现类。发布器(ApplicationEventPublisher)调用广播器(ApplicationEventMulticaster)把事件广播给支持当前事件的监听器(ApplicationListener)。通俗的话描述,就是广播器根据发布的事件,从所有的监听器中筛选出支持当前事件的监听器。
对于网上查询的一些监听器的应用,很多都是根据上下文初始化一些数据,做一些统计等,而针对于监听事务提交后触发事件这一个,springboot提供了一个@TransactionalEventListener
需要我们创建3个类,对应的分别是 事件, 监听器, 发布器,
事件继承ApplicationEvent 声明事件的类型,同时监听器中通过入参的类型确定是哪一种事件监听
监听器采用注解方式实现,@TransactionalEventListener 中间制定了监听器生效的时间,事件的类型,发生异常后如何处理
使用的地方注入 RefreshPublisher