初始化方法
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才真正调用初始化方法,而且在项目启动之前