【Spring 事件机制】
Spring 事件机制
组成:
-
事件源:事件对象的产生者,任何一个事件都有一个来源。
-
事件:基类是 EventObject ,spring事件 ApplicationEvent 抽象类继承EventObject 。
-
事件监听器:基类是 EventListener 接口,spring 事件监听器 ApplicationListener 接口继承 EventListener 。
值得一提的是,事件对象通常代表一类而非一个事件,合理的做法是将一类事件而非一个事件概念融合起来。
创建事件直接继承 ApplicationEvent 类。注意:需要super(source); source可随便new一个Object,或者传该事件的说明。
Spring内置事件类型:
Spring 提供了以下5种标准的事件:
- 上下文更新事件(ContextRefreshedEvent):在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。
- 上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。
- 上下文停止事件(ContextStoppedEvent):当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。
- 上下文关闭事件(ContextClosedEvent):当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。
- 请求处理事件(RequestHandledEvent):在Web应用中,当一个http请求(request)结束触发该事件。如果一个bean实现了ApplicationListener接口,当一个ApplicationEvent 被发布以后,bean会自动被通知。
业务方监听spring内置事件举例:
比如要监听ContextRefreshedEvent的时可以实现ApplicationListener接口,并且传入要监听的事件。
自定义事件:
事件发布:
ApplicationContext具有发布事件的能力。这是因为该接口继承了ApplicationEventPublisher接口。