spring -boot 监听事件运行原理

关于spring boot 的运行原理

   1. 首先要有一个事件 这个事件是要继承 ApplicationEvent 这个类的.

2.然后就是监听事件,这个类要实现ApplicationListener 

3.然后就是把事件加入到ApplicationContext 里面 也就是    

1.(还可以通过可以在自定义类上的监听器 加上@Component注解)这一种是把监听器放入spring容器里面管理

2.(还有可以通过在properties 文件里面配置 context.linstener.classes=”监听器的全类名“)

3.(还可以通过@EventListener 注解在方法上,这个方法的param的类型必须是ApplicationEvent的子类)这一种我觉得是最方便的。    

当然这个还是有其他方法

4.然后就是发布这个事件。通过ApplicationContext的pulishEvent方法



这样一个简单的事件监听就完了。

(1)我们简单的来看下context.linstener.classes 这种的实现原理,这种的是实现就要看DelegatingApplicationListener

这个类了。

DelegatingApplicationListener 这个类实现了ApplicationListener 这个类,然后ApplicationListener 继承这个类。

我们是主要看DelegatingApplicationListener 这个类里面的onApplicationEvent这个方法就可以的。


spring -boot 监听事件运行原理_第1张图片

这里首先会判断是不是ApplicationEnvironmentPreparedEvent这个类型,如果是这个类型才开始里面的逻辑getListeners() 方法 就是获得所有这个类型事件的监听器。

如果这个类型的监听器为空,那么就直接返回。

然后创建一个简单的广播事件SimpleApplicationEventMulticaster对象把所有的监听器加到里面。

最后就是进行广播事件。

ApplicationEnvironmentPreparedEvent 这个类是继承了SpringApplicationEvent然后 SpringApplicationEvent又继承了ApplicationEvent这个类。

(2)下面我们来看看@EventListener 注解这种实现的原理

这个我们就要参考EventListenerMethodProcessor这个类的afterSingletonsInstantiated()方法里面的processBean() 方法,



这个方法里面我们主要看这一断逻辑


spring -boot 监听事件运行原理_第2张图片
在这里它是把所有的ApplicationListener加入到ApplicationListener

你可能感兴趣的:(spring -boot 监听事件运行原理)