springboot源码分析10-ApplicationContextInitializer使用

原创 2017年12月06日 17:49:17

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


版权声明:本文为博主原创文章,未经博主允许不得转载。不经过允许copy,讲追究法律责任,欢迎加入我们的学习提升群523988350,可以相互交流

Springboot 源码解析(启动时)

springboot源码
  • liuzhigang828
  • liuzhigang828
  • 2017年06月28日 18:38
  • 635

Spring Boot 源码分析

在Spring Boot框架中,最先接触的应该就是SpringApplication这个类。所以源码分析也先从这个类开始。 SpringApplication用来从Java的main方法中启动Spri...
  • jc69186918
  • jc69186918
  • 2016年11月14日 16:02
  • 1866

Spring boot源码分析-环境搭建

Spring boot源码分析-环境搭建
  • jamet
  • jamet
  • 2017年08月19日 00:31
  • 538

Spring源码学习--Bean的生命周期

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring...
  • qq924862077
  • qq924862077
  • 2017年07月13日 10:19
  • 871

spring boot实战(第十篇)Spring boot Bean加载源码分析

前言 前面的文章描述了Application对应Bean的创建,本篇将阐述spring boot中bean的创建过程 refresh 首先来看SpringApplication#run方法中...
  • liaokailin
  • liaokailin
  • 2015年10月13日 23:30
  • 19293

【系统学习SpringBoot】SpringBoot定时任务详解

强大的SpringBoot对定时任务这种常用的功能做了很好的封装,,只需三步即可完成 一、添加依赖pom.xml文件中添加如下依赖: org.springframewor...
  • Small_Mouse0
  • Small_Mouse0
  • 2017年09月12日 23:30
  • 485

Spring boot源码分析-SpringBootApplication注解(8)

Spring boot源码分析-SpringBootApplication注解(8)我们一定很奇怪,调用 SpringApplication.run(ChapterProfilesApplicati...
  • jamet
  • jamet
  • 2017年10月20日 09:35
  • 363

springMVC源码分析--视图View(一)

之前的博客springMVC源码分析--HttpMessageConverter数据转化(一)中我们已经介绍了数据返回值的处理,在博客springMVC源码分析--ViewResolver视图解析器(...
  • qq924862077
  • qq924862077
  • 2017年02月20日 20:57
  • 1388

springboot源码分析11-ApplicationContextInitializer原理

摘要:springboot源码分析10-ApplicationContextInitializer使用一文中,我们详细地讲解了ApplicationContextInitializer的三种使用方式,...
  • qq_30739519
  • qq_30739519
  • 2017年12月07日 10:08
  • 520

SpringBoot RestTemplate源码分析

类定义为public class RestTemplate extends InterceptingHttpAccessor implements RestOperations,
  • zhanjianshinian
  • zhanjianshinian
  • 2017年07月02日 12:46
  • 323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:springboot源码分析10-ApplicationContextInitializer使用
举报原因:
原因补充:

(最多只允许输入30个字)