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