SpringBoot核心机制解读二、ApplicationContextInitializer
发布日期:2021-04-30 21:05:20 浏览次数:153 分类:精选文章

本文共 4266 字,大约阅读时间需要 14 分钟。

Spring Boot ApplicationListener ? ApplicationContextInitializer ??

? Spring Boot ??????ApplicationListener ? ApplicationContextInitializer ????????????????????????????? Spring Boot ??????

???????????

ApplicationListener ??????? Spring ?? IOC ???????????????????????????????????????????????

package com.roy.applicationContextInitializer;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
public class MyApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext context) {
System.out.println("==== systemProperties ===========");
context.getEnvironment().getSystemProperties().forEach((key, value) -> {
System.out.println(key + "===" + value);
});
System.out.println("==== systemProperties end ===========");
}
}

?????????? Spring Boot ??????

@SpringBootApplication
public class P1Application implements CommandLineRunner {
public static void main(String[] args) {
final SpringApplication application = new SpringApplication(P1Application.class);
application.addInitializers(new MyApplicationContextInitializer());
application.run(args);
}
@Autowired
private ApplicationContext applicationContext;
@Override
public void run(String... args) throws Exception {
System.out.println("Application ID: " + applicationContext.getId());
}
}

?????????????????????????

????????

????????????????? Spring Boot ???????????????????????????

public SpringApplication(ResourceLoader resourceLoader, Class
... primarySources) {
this.sources = new LinkedHashSet();
this.bannerMode = Mode.CONSOLE;
this.logStartupInfo = true;
this.addCommandLineProperties = true;
this.addConversionService = true;
this.headless = true;
this.registerShutdownHook = true;
this.additionalProfiles = Collections.emptySet();
this.isCustomEnvironment = false;
this.lazyInitialization = false;
this.applicationContextFactory = ApplicationContextFactory.DEFAULT;
this.applicationStartup = ApplicationStartup.DEFAULT;
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet(Arrays.asList(primarySources));
this.webApplicationType = WebApplicationType.deduceFromClasspath();
this.bootstrapRegistryInitializers = this.getBootstrapRegistryInitializersFromSpringFactories();
this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
}

??????????Spring Boot ??? SpringApplication ????????? ApplicationContextInitializer ????

??Spring Boot ?????

Spring Boot ?????????????????????????????????????ContextIdApplicationContextInitializer ???? ApplicationContext ? ID?

public class ContextIdApplicationContextInitializer 
implements ApplicationContextInitializer, Ordered {
private int order = Ordered.LOWEST_PRECEDENCE - 10;
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
applicationContext.setId(contextId(applicationContext).getId());
applicationContext.getBeanFactory().registerSingleton(
ContextId.class.getName(), contextId(applicationContext));
}
private ContextId contextId(ConfigurableApplicationContext applicationContext) {
ApplicationContext parent = applicationContext.getParent();
if (parent != null && parent.containsBean(ContextId.class.getName())) {
return parent.getBean(ContextId.class).createChildId();
}
return new ContextId(getApplicationId(applicationContext.getEnvironment()));
}
private String getApplicationId(ConfigurableEnvironment environment) {
String name = environment.getProperty("spring.application.name");
return StringUtils.hasText(name) ? name : "application";
}
}

??????????????? spring.application.name ????????? ApplicationContext ? ID?

???????????????????? Spring Boot ??????

????????

? Spring Boot ??????????????????????????????????? Spring Boot ???????????? ApplicationContextInitializer ??????????????????????? Spring Boot ???????????????

上一篇:jsp内置对象--session
下一篇:关于jdk问题记录

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2026年05月27日 05时29分52秒