示例
基于META-INF/spring.factories设置ApplicationContextInitializer实现类来实现自定义初始化器
1.创建一个TestInitializer 实现ApplicationContextInitializer,Ordered .
一个是初始化器接口, 一个是排序.
/**
* @Author: xc
* @Date: 2020/6/14
*/
public class TestInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>, Ordered {
//执行初始化器方法
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.out.println("===基于设置META-INF/spring.factories文件(ApplicationContextInitializer) 来实现之定义初始化器");
}
//排序 数值小的先执行
@Override
public int getOrder() {
return 0;
}
}
2.然后在resources目录下建立META-INF/spring.factories
指定ApplicationContextInitializer实现类.
org.springframework.context.ApplicationContextInitializer=com.zxc.demo.TestInitializer
3.启动项目
效果
原理
springboot启动流程中,构建SpringApplication的流程,会从项目路径中找到所有的META-INF/spring.factories文件然后加载ApplicationContextInitializer的实现类.
然后在run方法流程中的 准备上下文: prepareContext方法
prepareContext方法中会执行SpringApplication中加载的ApplicationContextInitializer实现类集合的initialize方法.
具体的源码分析可以参考我的另一篇博客: SpringBoot源码分析之-启动流程分析一(SpringApplication构造器).