


org.springframework.context.ApplicationContextInitializer- @Order(1)
- public class FirstInitializer implements ApplicationContextInitializer
{ - @Override
- public void initialize(ConfigurableApplicationContext applicationContext) {
- ConfigurableEnvironment environment = applicationContext.getEnvironment();
- environment.setRequiredProperties("mooc");
- // Map
map = new HashMap<>(); - // map.put("key1", "value1");
- // MapPropertySource mapPropertySource = new MapPropertySource("firstInitializer", map);
- // environment.getPropertySources().addLast(mapPropertySource);
- // System.out.println("run firstInitializer");
- }
- }
resources/META-INF/spring.factories编写添加:
org.springframework.context.ApplicationContextInitializer=com.mooc.sb2.initializer.FirstInitializer
- @Order(2)
- public class SecondInitializer implements ApplicationContextInitializer
{ - @Override
- public void initialize(ConfigurableApplicationContext applicationContext) {
- ConfigurableEnvironment environment = applicationContext.getEnvironment();
- Map
map = new HashMap<>(); - map.put("key2", "value2");
- MapPropertySource mapPropertySource = new MapPropertySource("secondInitializer", map);
- environment.getPropertySources().addLast(mapPropertySource);
- System.out.println("run secondInitializer");
- }
- }
设置:
- @SpringBootApplication
- @MapperScan("com.mooc.sb2.mapper")
- public class Sb2Application {
-
- public static void main(String[] args) {
- // SpringApplication.run(Sb2Application.class, args);
- SpringApplication springApplication = new SpringApplication(Sb2Application.class);
- springApplication.addInitializers(new SecondInitializer());
- springApplication.run(args);
- }
-
- }
context.initializer.classes- @Order(3)
- public class ThirdInitializer implements ApplicationContextInitializer
{ - @Override
- public void initialize(ConfigurableApplicationContext applicationContext) {
- ConfigurableEnvironment environment = applicationContext.getEnvironment();
- Map
map = new HashMap<>(); - map.put("key3", "value3");
- MapPropertySource mapPropertySource = new MapPropertySource("thirdInitializer", map);
- environment.getPropertySources().addLast(mapPropertySource);
- System.out.println("run thirdInitializer");
- }
- }
context.initializer.classes=com.mooc.sb2.initializer.ThirdInitializer


源码具体流程:




三种方式:
spring.factories文件中被SpringFactoriesLoader发现注册DelegatingApplicationContextInitializer发现注册所以为什么application.properties中的初始化器不管定义为Order为多少都是最先被加载,因为DelegatingApplicationContextInitializer中的Order设置的是0, 优先加载的始终是DelegatingApplicationContextInitializer中的初始化器
最后推荐使用spring.factories的方式定义初始化器
