1,观察者(发布-订阅)模式
1)ApplicationEvent 事件
ContextStartedEvent IOC容器启动时触发事件
ContextRefreshedEvent IOC容器初始化、刷新时触发事件
ContextClosedEvent IOC容器关闭时触发事件
ContextStoppedEvent IOC容器停止时触发事件
image.png
2)监听器(观察者)ApplicationListener
image.png
3)事件源(被观察者)ApplicationContext
包含一个监听器(观察者)集合Set<ApplicationListener<?>>,applicationContext通过publishEvent方法发布事件,交由ApplicationListener 监听处理。
image.png
ApplicationContext继承了ApplicationEventPublisher事件发布器
image.png
image.png
2,自定义事件,发布监听
1)自定义事件
image.png
2)配置监听器(配置到<beans>中或者@Bean配置
)
image.png
3)发布事件
image.png
3,@EventListener注解
1)注解作用
spring4.2后,在bean的方法加注解,来标记该bean实现了listener方法。实现解耦
marks a method as a listener for application events.
2)spring4.2版本后,不在强制要求自定义事件继承ApplicationEvent,非ApplicationEvent子类的对象将被包装成PayloadApplicationEvent
。
3)配合@Async注解。
@EnableAsync 开启异步支持,可以自定义Executor。(如果不配置的话、springboot会提供默认的线程池)
@Async 可以指定Executor,此方法被包裹成任务放入线程池中异步执行。
网友评论