Spring中的事件机制

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方法。

    事件发布,ApplicationEventPublisher,是一个接口,包含publishEvent()方法,ApplicationContext继承了该接口,在AbstractApplicationContext中实现里事件的发布接口。
   Spring是如何通过事件找到对应的监听器的呢?Spring利用反射机制,通过getBeansOfType获取所有继承了ApplicationListener接口的监听器,然后把监听器放到注册表中。

你可能感兴趣的:(Spring学习)