在我们日常开发过程中,经常会用到spring的监听器,今天我们就来分析一下,他的执行流程。
我么一般的使用方式是
![](https://img.haomeiwen.com/i2585555/8bcb4be1f30201f2.png)
这个监听器,监听的是ContextReFreshedEvent的事件,所以当事件发生时,就会被这个监听器监听,从而执行方法中的逻辑。
总的步骤分为两个部分,第一步是监听器的注册,第二步是监听器的运行。
下面我们介绍第一部分-监听器的注册。
当spring容器启动时
![](https://img.haomeiwen.com/i2585555/32469fcbfaed1f4a.png)
![](https://img.haomeiwen.com/i2585555/1583fc2e24ee168f.png)
在这个preInstantiateSingletons方法中,有下面一段逻辑,找寻SmartInitializingSingleton 这个类的实例,执行他的afterSingletonsInstantiated方法
就把 这个类扫出来了-EventListenerMethodProcessor
![](https://img.haomeiwen.com/i2585555/f61132ec9e2f47bf.png)
这个类的afterSingletonsInstantiated方法如下
![](https://img.haomeiwen.com/i2585555/32283c90fd71d5ab.png)
![](https://img.haomeiwen.com/i2585555/ed35dbde44155cd8.png)
![](https://img.haomeiwen.com/i2585555/f4eaf4bb43b11a71.png)
![](https://img.haomeiwen.com/i2585555/6bdadef87750eab1.png)
到目前为止已经声明了一个ApplicationLister并且注册好了,下面要开始我的第二部分---使用了
![](https://img.haomeiwen.com/i2585555/3cc6522ac5d8389e.png)
发出了一个RefreshedEvent的事件
![](https://img.haomeiwen.com/i2585555/c90684141559aefe.png)
开始广播事件
![](https://img.haomeiwen.com/i2585555/0227c17797ef22cc.png)
调用监听器方法
![](https://img.haomeiwen.com/i2585555/a54684c558aaf9d7.png)
![](https://img.haomeiwen.com/i2585555/721ef91ca593925d.png)
![](https://img.haomeiwen.com/i2585555/1734057b656809a6.png)
真正的处理方法
![](https://img.haomeiwen.com/i2585555/5884cc72c9ac82f4.png)
这就是spring监听器的使用的流程了。
网友评论