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接口的监听器,然后把监听器放到注册表中。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值