SpringBoot启动过程之初始化器initializer和监听器listeners

本文详细探讨了SpringBoot的启动过程,包括ApplicationContextInitializer如何进行初始化工作,如设置应用ID、输出警告日志、配置端口等。同时介绍了ApplicationListener及其与不同事件的绑定,如ConfigFileApplicationListener加载配置文件,LoggingApplicationListener初始化日志系统。最后,解析了SpringApplicationRunListeners和SpringApplicationRunListener在启动过程中的作用。
摘要由CSDN通过智能技术生成

参考https://my.oschina.net/xiaoqiyiye/blog/1624181 SpringBoot初始化器和监听器

        http://jinnianshilongnian.iteye.com/blog/1902886  Spring事件机制
        

Listener类图

SpringApplication构造的时候内部会调用一个private方法initialize:

public SpringApplication(Object... sources) {
initialize(sources); // sources目前是一个MyApplication的class对象
}
private void initialize(Object[] sources) {
if (sources != null && sources.length > 0) {
this.sources.addAll(Arrays.asList(sources)); // 把sources设置到SpringApplication的sources属性中,目前只是一个MyApplication类对象
}
this.webEnvironment = deduceWebEnvironment(); // 判断是否是web程序(javax.servlet.Servlet和org.springframework.web.context.ConfigurableWebApplicationContext都必须在类加载器中存在),并设置到webEnvironment属性中
// 从spring.factories文件中找出key为ApplicationContextInitializer的类并实例化后设置到SpringApplication的initializers属性中。这个过程也就是找出所有的应用程序初始化器
setInitializers((Collection) getSpringFactoriesInstances(
ApplicationContextInitializer.class));
// 从spring.factories文件中找出key为ApplicationListener的类并实例化后设置到SpringApplication的listeners属性中。这个过程就是找出所有的应用程序事件监听器
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
// 找出main类,这里是MyApplication类
this.mainApplicationClass = deduceMainApplicationClass();
}

ApplicationContextInitializer,应用程序初始化器,做一些初始化的工作:

public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {
void initialize(C applicationContext);
}
类名
org.springframework.boot.context.config.DelegatingApplicationContextInitializer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值