本文共 1972 字,大约阅读时间需要 6 分钟。
SpringApplicationRunListener
SpringApplicationRunListener是一个只有SpringBoot应用的main方法执行过程中接收不同执行时点事件通知的监听者
: public interface SpringApplicationRunListener { void started(); void environmentPrepared(ConfigurableEnvironment environment); void contextPrepared(ConfigurableApplicationContext context); void contextLoaded(ConfigurableApplicationContext context); void finished(ConfigurableApplicationContext context, Throwable exception);}
对于我们来说,基本没什么常见的场景需要自己实现
一个SpringApplicationRunListener,即使SpringBoot默认也只是实现了一个org.spring-framework.boot.context.event.EventPublishingRunListener
,用于在SpringBoot启动的不同时点发布不同的应用事件类型(ApplicationEvent)
,如果有哪些ApplicationListener对这些应用事件感兴趣,则可以接收并处理。(还记得SpringApplication实例初始化的时候加载了一批ApplicationListener,但是在run方法执行流程中却没有被使用的丝毫痕迹吗?EventPublishingRunListener就是答案!)
假设我们真的有场景需要自定义一个SpringApplicationRunListener实现,那么有一点需要注意,即任何一个SpringApplicationRunListener实现类的构造方法(Constructor)需要有两个构造参数,一个构造参数的类型就是我们的org.springframework.boot.SpringApplication,另外一个就是args参数列表的String[]:
public class DemoSpringApplicationRunListener implements SpringApplicationRunListener { @Override public void started() { // do whatever you want to do } @Override public void environmentPrepared(ConfigurableEnvironment environment) { // do whatever you want to do } @Override public void contextPrepared(ConfigurableApplicationContext context) { // do whatever you want to do } @Override public void contextLoaded(ConfigurableApplicationContext context) { // do whatever you want to do } @Override public void finished(ConfigurableApplicationContext context, Throwable exception) { // do whatever you want to do }}
之后,我们可以通过SpringFactoriesLoader立下的规矩,在当前SpringBoot应用的classpath下的META-INF/spring.factories文件中进行类似如下的配置:
org.springframework.boot.SpringApplicationRunListener=\com.keevol.springboot.demo.DemoSpringApplicationRunListener
然后SpringApplication就会在运行的时候调用它啦!
转载地址:https://blog.csdn.net/ynchyong/article/details/112510165 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!