1、先理清楚几个基本概念:
1)事件驱动模型
当事件被触发的时候,将事件加入一个事件队列,然后通过主程序不断轮训事件队列,处理目标函数。常见的事件驱动如鼠标点击事件、IO事件等,观察者设计模式就是事件驱动的一个很好实现。
2)消息驱动模型/发布订阅模型
本质上讲,事件驱动和消息驱动相当,只是各自应用在不同的场景下。事件模式耦合高,同模块内好用;消息模式耦合低,跨模块好用。
2、Spring对事件的支持
在spring中提供的标准事件:
1)ContextRefreshEvent,当ApplicationContext容器初始化完成或者被刷新的时候,就会发布该事件。
2)ContextStartedEvent,当ApplicationContext启动的时候发布事件,即调用ConfigurableApplicationContext接口的start方法的时候
3)ContextStoppedEvent,当ApplicationContext容器停止的时候发布事件,即调用ConfigurableApplicationContext的close方法的时候
4)ContextClosedEvent,当ApplicationContext关闭的时候发布事件,即调用ConfigurableApplicationContext的close方法的时候,关闭指的是所有的单例Bean都被销毁。
5)equestHandledEvent,只能用于DispatcherServlet的web应用,Spring处理用户请求结束后,系统会触发该事件。
3、Spring事件机制实现
事件,ApplicationEvent,继承自EventObject。
事件监听器,ApplicationListener,是一个接口,继承自EventListener,实际中需要实现其onApplicationEvent方法。