add springboot application context initializer by spring application … · aizya/JavaSpringBootSamples@311cfb1 · GitHub
Skip to content

Commit 311cfb1

Browse files
committed
add springboot application context initializer by spring application add initializers function
1 parent 291ea34 commit 311cfb1

5 files changed

Lines changed: 67 additions & 6 deletions

File tree

‎springboot-source-code-analysis/src/main/java/com/example/springboot/source/code/analysis/controller/InitializerController.java‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,22 @@ public class InitializerController {
2424

2525
/**
2626
* 测试框架初始化器 ApplicationContextInitializer
27+
* 通过 META-INF/spring.factories 配置 ApplicationContextInitializer 的方式
2728
*/
2829
@RequestMapping(value = "first", method = RequestMethod.GET)
2930
@ResponseBody
30-
public String testFirstInitializer(){
31-
return firstInitializerService.getCustomEnvironmentProperty();
31+
public String testFirstInitializer() {
32+
return firstInitializerService.getCustomEnvironmentProperty("firstKey");
33+
}
34+
35+
/**
36+
* 测试框架初始化器 ApplicationContextInitializer
37+
* 通过 springApplication.addInitializers(new SecondInitializer()) 的方式
38+
*/
39+
@RequestMapping(value = "second", method = RequestMethod.GET)
40+
@ResponseBody
41+
public String testSecondInitializer() {
42+
return firstInitializerService.getCustomEnvironmentProperty("second");
3243
}
3344

3445
}

‎springboot-source-code-analysis/src/main/java/com/example/springboot/source/code/analysis/initializer/FirstInitializer.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void initialize(ConfigurableApplicationContext configurableApplicationCon
3232

3333
// 设置自定义属性
3434
Map<String, Object> attributeMap = new HashMap<>();
35-
attributeMap.put("key1", "value1");
35+
attributeMap.put("firstKey", "firstValue");
3636

3737
// 添加自定义属性
3838
MapPropertySource mapPropertySource = new MapPropertySource("firstInitializer", attributeMap);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.example.springboot.source.code.analysis.initializer;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.springframework.context.ApplicationContextInitializer;
6+
import org.springframework.context.ConfigurableApplicationContext;
7+
import org.springframework.core.annotation.Order;
8+
import org.springframework.core.env.ConfigurableEnvironment;
9+
import org.springframework.core.env.MapPropertySource;
10+
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
14+
/**
15+
* FirstInitializer 系统初始化器
16+
*
17+
* @author ipipman
18+
* @version V1.0
19+
* @date 2021/6/5
20+
* @date 2021/6/5 8:20 下午
21+
*/
22+
@Order(2) // 设置执行顺序
23+
public class SecondInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
24+
25+
private static final Logger logger = LoggerFactory.getLogger(SecondInitializer.class);
26+
27+
@Override
28+
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
29+
// 获取系统属性
30+
ConfigurableEnvironment environment =
31+
configurableApplicationContext.getEnvironment();
32+
33+
// 设置自定义属性
34+
Map<String, Object> attributeMap = new HashMap<>();
35+
attributeMap.put("secondKey", "secondValue");
36+
37+
// 添加自定义属性
38+
MapPropertySource mapPropertySource = new MapPropertySource("secondInitializer", attributeMap);
39+
environment.getPropertySources().addLast(mapPropertySource);
40+
logger.info("设置框架初始化器【ApplicationContextInitializer】成功 : run secondInitializer");
41+
}
42+
}

‎springboot-source-code-analysis/src/main/java/com/example/springboot/source/code/analysis/service/TestFirstInitializerService.java‎

Lines changed: 2 additions & 2 deletions

0 commit comments

Comments
 (0)