本文共 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 ??????
@SpringBootApplicationpublic 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 ???????????????
发表评论
最新留言
关于作者