springboot源码分析10-ApplicationContextInitializer使用

简介: 摘要:spring中ApplicationContextInitializer接口是在ConfigurableApplicationContext刷新之前初始化ConfigurableApplicationContext的回调接口。

摘要:spring中ApplicationContextInitializer接口是在ConfigurableApplicationContext刷新之前初始化ConfigurableApplicationContext的回调接口。当spring框架内部执行 ConfigurableApplicationContext#refresh() 方法的时候回去回调。

1.1. 实现方式一

首先,我们需要自定义一个类并且实现ApplicationContextInitializer接口。示例代码如下:

public class ShareniuApplicationContextInitializer

implements ApplicationContextInitializer<ConfigurableApplicationContext> {

public void initialize(ConfigurableApplicationContext ac) {

System.out.println("跟着分享牛学习springboot源码分析系列文章1");

}

 

}

非常的简单,我们仅仅是输出了一行日志。在这里我们可以修改ac对象的各种属性值,毕竟他是个引用类型。

新建一个测试类进行测试,示例代码如下:

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

SpringApplication springApplication = new SpringApplication(DemoApplication.class);

springApplication.addInitializers(new ShareniuApplicationContextInitializer());

ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);

}

}

运行上述代码,程序的输出如下:

 

1.2. 实现方式二

首先,我们需要自定义一个类并且实现ApplicationContextInitializer接口。示例代码如下:

public class ShareniuApplicationContextInitializer1

implements ApplicationContextInitializer<ConfigurableApplicationContext> {

public void initialize(ConfigurableApplicationContext ac) {

System.out.println("跟着分享牛学习springboot源码分析系列文章2");

}

 

}

然后在项目的根目录中新建一个application.properties。并进行如下的属性配置:

context.initializer.classes=com.example.demo.ch10.ShareniuApplicationContextInitializer1

application.properties层级结构如下:

 

再次执行方式一的DemoApplication ,程序的输出如下图所示:

 

Ok,这种方式也是可以实现的。

1.3. 实现方式三

首先,我们需要自定义一个类并且实现ApplicationContextInitializer接口。示例代码如下:

public class ShareniuApplicationContextInitializer2

implements ApplicationContextInitializer<ConfigurableApplicationContext> {

public void initialize(ConfigurableApplicationContext ac) {

System.out.println("跟着分享牛学习springboot源码分析系列文章3");

}

}

然后我们在项目的根目录中新建META-INF/spring.factories文件。目录结构如下所示:

 

spring.factories文件的内容如下:

org.springframework.context.ApplicationContextInitializer=\

com.example.demo.ch10.ShareniuApplicationContextInitializer2

再次执行方式一的DemoApplication ,程序的输出如下图所示:



欢迎关注我的微信公众号,第一时间获得博客更新提醒,以及更多成体系的Java相关原创技术干货。 
扫一扫下方二维码或者长按识别二维码,即可关注。
 


相关文章
|
7月前
|
安全 Java Spring
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
102 0
|
7月前
|
设计模式 Java 容器
SpringBoot2 | SpringBoot启动流程源码分析(二)
SpringBoot2 | SpringBoot启动流程源码分析(二)
85 0
|
3月前
|
Java 开发者 Spring
Springboot中ApplicationContextInitializer的使用及源码分析
`ApplicationContextInitializer` 是 Spring Boot 提供的一个强大的接口,它允许开发者有机会在应用上下文刷新之前,注入自定义的启动逻辑或预处理。通过合理地利用这个接口,可以提升应用的可配置性和灵活性。了解如何运用 `ApplicationContextInitializer` 可以让你在 Spring Boot 应用的早期启动阶段,有更多控制权。
138 4
|
7月前
|
前端开发 Java Spring
SpringBoot2 | SpringBoot Environment源码分析(四)
SpringBoot2 | SpringBoot Environment源码分析(四)
73 0
|
7月前
|
Java 中间件 容器
SpringBoot2 | SpringBoot启动流程源码分析(一)
SpringBoot2 | SpringBoot启动流程源码分析(一)
91 0
|
7月前
|
XML Java 应用服务中间件
SpringBoot配置外部Tomcat项目启动流程源码分析(长文)
SpringBoot配置外部Tomcat项目启动流程源码分析(长文)
594 0
|
Java 应用服务中间件 数据库连接
头秃系列,二十三张图带你从源码分析Spring Boot 启动流程~
前言 源码版本 从哪入手? 源码如何切分? 如何创建SpringApplication? 设置应用类型 设置初始化器(Initializer) 设置监听器(Listener) 设置监听器(Listener) 执行run()方法 获取、启动运行过程监听器 环境构建 创建IOC容器 IOC容器的前置处理 刷新容器 IOC容器的后置处理 发出结束执行的事件 执行Runners 总结 总结
|
Java 测试技术 容器
全网最详细的介绍SpringBoot启动过程源码分析
上一篇我们介绍了SpringBoot的自动装配的知识,这一篇我们将介绍SpringBoot最核心的知识点,SpringBoot应用的启动过程。这个启动过程比较复杂,在此我只介绍核心的知识点。其启动过程大概分为两步。1. 初始化SpringApplication对象,2.执行SpringApplication对象的run方法。
163 0
全网最详细的介绍SpringBoot启动过程源码分析
|
前端开发 Java 应用服务中间件
《SpringBoot启动流程七》:源码分析SpringBoot如何内嵌并启动Tomcat服务器的?
《SpringBoot启动流程七》:源码分析SpringBoot如何内嵌并启动Tomcat服务器的?
457 0
《SpringBoot启动流程七》:源码分析SpringBoot如何内嵌并启动Tomcat服务器的?
|
Java Spring 容器
《SpringBoot启动流程六》:SpringBoot自动装配时做条件装配的原理(万字图文源码分析)(含@ConditionalOnClass原理)
《SpringBoot启动流程六》:SpringBoot自动装配时做条件装配的原理(万字图文源码分析)(含@ConditionalOnClass原理)
429 0
《SpringBoot启动流程六》:SpringBoot自动装配时做条件装配的原理(万字图文源码分析)(含@ConditionalOnClass原理)