Spring(22)——ApplicationEvent

这篇博客详细介绍了Spring的ApplicationEvent机制,包括内置的ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent和ServletRequestHandledEvent事件,以及如何自定义事件和事件发布。同时讲解了事件监听器ApplicationListener的实现方式,强调了监听器需要作为bean存在于容器中才能生效。
摘要由CSDN通过智能技术生成

22 ApplicationEvent

Spring允许我们在ApplicationContext中发布ApplicationEvent事件,然后对应的ApplicationListener可以用来监听对应的事件。当发布了一个ApplicationEvent后,在对应bean容器中实现了ApplicationListener接口的bean实例都会接收到对应的通知,即对应的ApplicationListener回调方法将会被调用。

22.1内置事件

Spring自身已经为我们提供了几个ApplicationEvent,它们会由Spring在相应的时间自动进行发布,用户如果有需要可以对它们进行监听。具体来说有如下几种类型。

22.1.1 ContextRefreshedEvent

ContextRefreshedEvent将在对应的ApplicationContext调用refresh()方法时进行发布,这也包括直接使用配置文件等进行对应的ApplicationContext初始化时,因为在这个时候也会调用对应的refresh()方法。而在refresh()方法中是在该方法的最后才进行ContextRefreshedEvent发布的,也就是说在发布ContextRefreshedEvent时对应ApplicationContext中的bean定义都已经加载完成,对应的BeanFactoryPostProcessor都执行过了,需要实例化的bean也都已经实例化了。

22.1.2 ContextStartedEvent

ContextStartedEvent将在对应的ApplicationContext调用start()方法时进行发布。此时已经对所有实现了LifeCycle接口的bean回调了对应的start()方法。

22.1.3ContextStoppedEvent

ContextStoppedEvent将在对应的ApplicationContext调用stop()方法时进行发布。此时已经对所有实现了LifeCycle接口的bean回调了对应的stop()方法。

22.1.4ContextClosedEvent

ContextClosedEvent将在对应的ApplicationContext调用close()方法时进行发布。此时所有的资源都已经销毁了。ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent和ContextClosedEvent都继承自ApplicationContextEvent,因为它们都是针对ApplicationContext的事件。

22.1.5 ServletRequestHandledEvent

ServletRequestHandledEvent将在Spring处理了一个HttpRequest请求后进行发布,即对应的HttpRequest已经完成了。ServletRequestHandledEvent只能在使用DispatcherServlet时使用,当DispatcherServlet处理完一个HttpRequest请求后将发布一个ServletRequestHandledEvent。ServletRequestHandledEvent继承自RequestHandledEvent,所以当我们需要监听RequestHandledEvent时也可以监听ServletRequestHandledEvent。

22.2 自定义事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值