ApplicationContext的事件机制
简单例子
完成事件机制首先需要一个事件源和事件监听器ApplicationEvent
事件和ApplicationListener
监听器
1 | public class SayEvent extends ApplicationEvent { |
并且要在xml
文件中配置好ApplicationListener
监听器
1 | <beans> |
通过ApplicationContext
发布事件
1 |
|
Spring
的事件监听机制是观察者模式的实现。
监听器可以监听任何事件。
输出结果:由testEvent()发出 : hello world
内置事件
Spring提供如下几个内置事件:
ContextRefreshedEvent
:ApplicationContext
容器初始化或刷新时触发该事件。此处的初始化是指:所有的Bean
被成功装载,后处理Bean
被检测并激活,所有Singleton Bean
被预实例化,ApplicationContext
容器已就绪可用ContextStartedEvent
:当使用ConfigurableApplicationContext
(ApplicationContext
的子接口)接口的start()
方法启动ApplicationContext
容器时触发该事件。容器管理声明周期的Bean
实例将获得一个指定的启动信号,这在经常需要停止后重新启动的场合比较常见ContextClosedEvent
:当使用ConfigurableApplicationContext
接口的close()
方法关闭ApplicationContext
时触发该事件ContextStoppedEvent
:当使用ConfigurableApplicationContext
接口的stop()
方法使ApplicationContext
容器停止时触发该事件。此处的停止,意味着容器管理生命周期的Bean
实例将获得一个指定的停止信号,被停止的Spring
容器可再次调用start()
方法重新启动RequestHandledEvent
:Web
相关事件,只能应用于使用DispatcherServlet
的Web
应用。在使用Spring
作为前端的MVC
控制器时,当Spring
处理用户请求结束后,系统会自动触发该事件。