springboot源码分析10-ApplicationContextInitializer使用

摘要: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相关原创技术干货。 
扫一扫下方二维码或者长按识别二维码,即可关注。
 


猜你喜欢

转载自blog.csdn.net/qq_30739519/article/details/78733255