Spring中的监听器SpringApplicationRunListener详解
作者:你就像甜甜的益达
这篇文章主要介绍了Spring中的监听器SpringApplicationRunListener详解,命名我们就可以知道它是一个监听者,分析springboot启动流程我们会发现,它其实是用来在整个启动流程中接收不同执行点事件通知的监听者,需要的朋友可以参考下
SpringApplicationRunListenerde作用
命名我们就可以知道它是一个监听者,分析springboot启动流程我们会发现,它其实是用来在整个启动流程中接收不同执行点事件通知的监听者
SpringApplicationRunListener接口规定了SpringBoot的生命周期,在各个生命周期广播相应的事件,调用实际的ApplicationListener类。
源码分析
前面分析过,前面讲过启动的时候会先加载spring会加载所有jar包下的META-INF/spring.factories,然后缓存起来,这里就可以通过类型进行获取;
然后通过反射,实例化SpringApplicationRunListener类;注意,前面讲过实例化的类型,一个是SpringApplication类型,一个String数组类型;
然后就会在springboot容器的各个阶段通过封装的类SpringApplicationRunListeners进行处理;
方法详解
public interface SpringApplicationRunListener { //刚执行run方法时 void started(); //环境建立好时候 void environmentPrepared(ConfigurableEnvironment environment); //上下文建立好的时候 void contextPrepared(ConfigurableApplicationContext context); //上下文载入配置时候 void contextLoaded(ConfigurableApplicationContext context); //上下文刷新完成后,run方法执行完之前 void finished(ConfigurableApplicationContext context, Throwable exception); }
具体使用
新建类实现SpringApplicationRunListener,需要构造方法,里面两个参数SpringApplication sa, String[] args;
在resources下新建META-INF\spring.factories文件,文件里面将新建的实现类的类路径配置进去:
org.springframework.boot.SpringApplicationRunListener=com.study.springbootplus.config.MyApplicationRunListener
public class MyApplicationRunListener implements SpringApplicationRunListener { private final SpringApplication application; private final String[] args; public MyApplicationRunListener(SpringApplication sa, String[] args) { this.application = sa; this.args = args; } @Override public void starting() { System.out.println("服务启动RunnerTest SpringApplicationRunListener的starting方法..."); } @Override public void environmentPrepared(ConfigurableEnvironment environment) { System.out.println("服务启动RunnerTest SpringApplicationRunListener的environmentPrepared方法..."); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("服务启动RunnerTest SpringApplicationRunListener的contextPrepared方法..."); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("服务启动RunnerTest SpringApplicationRunListener的contextLoaded方法..."); } @Override public void running(ConfigurableApplicationContext context) { System.out.println("服务启动RunnerTest SpringApplicationRunListener的running方法..."); } @Override public void failed(ConfigurableApplicationContext context, Throwable exception) { System.out.println("服务启动RunnerTest SpringApplicationRunListener的failed方法..."); } @Override public void started(ConfigurableApplicationContext context) { System.out.println("服务启动RunnerTest SpringApplicationRunListener的started方法..."); } }
注意事项
- 任何一个SpringApplicationRunListener实现类的构造方法都需要有两个构造参数;源码里面分析了,需要根据指定类型的构造方法初始化类;
- SpringApplicationRunListener的配置在resources下新建META-INF\spring.factories文件,文件里面将新建的实现类的类路径配置进去,对应的key是org.springframework.boot.SpringApplicationRunListener;
- SpringApplicationRunListener属于应用程序启动层面的监听器,在springboot启动时候,调用run方法进行反射加载初始化。此时上下文还没有加载,如果通过@Compnant是起不了作用的.
到此这篇关于Spring中的监听器SpringApplicationRunListener详解的文章就介绍到这了,更多相关Spring的SpringApplicationRunListener内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!