初始化方法
org.springframework.boot.context.config.DelegatingApplicationContextInitializer
@Override
public void initialize(ConfigurableApplicationContext context) {
ConfigurableEnvironment environment = context.getEnvironment();
/**
* 初始化环境变量中的context.initializer.classes指定的类
**/
List<Class<?>> initializerClasses = getInitializerClasses(environment);
if (!initializerClasses.isEmpty()) {
applyInitializerClasses(context, initializerClasses);
}
}
也就是说没有定义的话,就不会初始化了。
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
/**
* 注册一个元数据读取的工厂类
**/
applicationContext.addBeanFactoryPostProcessor(new CachingMetadataReaderFactoryPostProcessor());
}
org.springframework.boot.context.ContextIdApplicationContextInitializer
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ContextId contextId = getContextId(applicationContext);
applicationContext.setId(contextId.getId());
/**
* 注册一个ContextId对象
**/
applicationContext.getBeanFactory().registerSingleton(ContextId.class.getName(), contextId);
}
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer
@Override
public void initialize(ConfigurableApplicationContext context) {
/**
* 注入ComponentScan检查处理对象
**/
context.addBeanFactoryPostProcessor(new ConfigurationWarningsPostProcessor(getChecks()));
}
org.springframework.boot.rsocket.context.RSocketPortInfoApplicationContextInitializer
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
/**
* 注入一个端口检查和设置的监听器,对应的事件RSocketServerInitializedEvent
**/
applicationContext.addApplicationListener(new Listener(applicationContext));
}
org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
/**
注册了一个监听org.springframework.boot.web.context.WebServerInitializedEvent事件的监听器,用于设置端口信息
**/
applicationContext.addApplicationListener(this);
}
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
this.applicationContext = applicationContext;
applicationContext.addApplicationListener(new ConditionEvaluationReportListener());
if (applicationContext instanceof GenericApplicationContext) {
// Get the report early in case the context fails to load
// 注册一个监听ApplicationEvent事件的监听器用于打印自动配置后的日志信息
this.report = ConditionEvaluationReport.get(this.applicationContext.getBeanFactory());
}
}
所有的这些初始化类都没偶进行启动服务的实质性操作,都是通过注册对象,埋点,后面invokeBeanFactoryPostProcessors才真正调用初始化方法,而且在项目启动之前
Spring Boot应用初始化流程解析
本文深入探讨了Spring Boot应用程序的初始化过程,详细分析了多个关键初始化类的作用,包括环境变量初始化、元数据读取、端口信息设置等,揭示了它们如何通过注册监听器和对象来准备应用运行环境。
581

被折叠的 条评论
为什么被折叠?



