Spring中的事件监听
前面我们大致了解了一下事件监听,我们接着来看看Spring中的事件监听是如何使用的。这里我选用了springboot 1.5.7的源码来学习。
在启动类中执行SpringApplication.run()后,首先会执行SpringApplication类的initialize(Object[] sources)方法,然后初始化initializers和listeners两个集合,initializers集合存放的是springboot从配置文件自动装配的6个ApplicationContextInitializer对应的类,listeners集合存放的是从配置文件自动装配的10个ApplicationListener对应的类。
这个加载方式是通过读取配置文件中类的路径,然后利用反射生成的对象。具体方法如下:
接下来,我们看run(String… args)方法中的执行内容:
首先会通过getRunListeners(String[] args)方法去从配置文件读取key=SpringApplicationRunListener对应的类名然后通过反射生成对象,这里就一个EventPublishingRunListener对象。
接着执行listeners.starting();方法。这里会调用EventPublishingRunListener的starting()方法,查看源码,我们看到这里是调用一个广播器发送广播的方法
继续跟踪,执行到了SimpleApplicationEventMulticaster类中,通过名字我们可以知道这是一个广播器,用于专门发送事件的。