几个重要的事件回调机制

配置在META-INF/spring.factories ApplicationContextInitializer

SpringApplicationRunListener

只需要放在ioc容器中的两个ApplicationRunner CommandLineRunner

启动流程:

一、创SpringApplication对象

二、运行run方法

三、事件监听机制

配置在META-INF/spring.factories

ApplicationContextInitializer

  1. public class HelloApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
  2. @Override
  3. public void initialize(ConfigurableApplicationContext applicationContext) {
  4.    System.out.println("ApplicationContextInitializer...initialize..."+applicationContext);
    }
  5. }

SpringApplicationRunListener

  1. public class HelloSpringApplicationRunListener implements SpringApplicationRunListener {
  2.  
  3. //必须有的构造器
  4. public HelloSpringApplicationRunListener(SpringApplication application, String[] args){
  5.  
  6. }
  7.  
  8. @Override
  9. public void starting() {
    System.out.println("SpringApplicationRunListener...starting...");
  10. }
  11.  
  12. @Override
  13. public void environmentPrepared(ConfigurableEnvironment environment) {
    Object o = environment.getSystemProperties().get("os.name");
  14. System.out.println("SpringApplicationRunListener...environmentPrepared.."+o);
  15. }
  16.  
  17. @Override
  18. public void contextPrepared(ConfigurableApplicationContext context) {
    System.out.println("SpringApplicationRunListener...contextPrepared...");
  19. }
  20.  
  21. @Override
  22. public void contextLoaded(ConfigurableApplicationContext context) {
    System.out.println("SpringApplicationRunListener...contextLoaded...");
  23. }
  24.  
  25. @Override
  26. public void finished(ConfigurableApplicationContext context, Throwable exception)

配置(META-INF/spring.factories)

  1. org.springframework.context.ApplicationContextInitializer=\
  2. com.atguigu.springboot.listener.HelloApplicationContextInitializer

 org.springframework.boot.SpringApplicationRunListener=\

 com.atguigu.springboot.listener.HelloSpringApplicationRunListener

只需要放在ioc容器中

ApplicationRunner

  1. @Component
  2. public class HelloApplicationRunner implements ApplicationRunner{
  3. @Override
  4. public void run(ApplicationArguments args) throws Exception {
  5. System.out.println("ApplicationRunner...run....");
  6. }
  7.  
  8. }

CommandLineRunner

  1. @Component
  2. public class HelloCommandLineRunner implements CommandLineRunner {
  3. @Override
  4. public void run(String... args) throws Exception {
  5. System.out.println("CommandLineRunner...run..."+ Arrays.asList(args));
  6. }
  7.  
  8. }

【串线篇】spring boot启动配置原理的更多相关文章

  1. 七、Spring Boot 启动配置原理

    几个重要的事件回调机制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener ...

  2. Spring boot 启动配置原理

    配置在META-INF/spring.factories 有几个主要的类 ApplicationContextInitializer    创建SpringAplication SpringAppli ...

  3. Spring Boot自动配置原理与实践(二)

    前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...

  4. Spring Boot自动配置原理、实战

    Spring Boot自动配置原理 Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射. org.s ...

  5. Spring Boot自动配置原理(转)

    第3章 Spring Boot自动配置原理 3.1 SpringBoot的核心组件模块 首先,我们来简单统计一下SpringBoot核心工程的源码java文件数量: 我们cd到spring-boot- ...

  6. 峰哥说技术:06-手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 06  峰哥说技术:手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理 Sp ...

  7. Spring Boot自动配置原理与实践(一)

    前言 Spring Boot众所周知是为了简化Spring的配置,省去XML的复杂化配置(虽然Spring官方推荐也使用Java配置)采用Java+Annotation方式配置.如下几个问题是我刚开始 ...

  8. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  9. spring boot 自动配置原理

    1).spring boot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration,先看一下启动类的main方法 public ConfigurableApplic ...

随机推荐

  1. Mybaits二级缓存的使用与配置

    什么是延迟加载  resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信 ...

  2. LeetCode 300——最长上升子序列

    1. 题目 2. 解答 2.1. 动态规划 我们定义状态 state[i] 表示以 nums[i] 为结尾元素的最长上升子序列的长度,那么状态转移方程为: \[state[i] = max(state ...

  3. (转)使用NMAP工具扫描端口

    原文:http://www.linuxde.net/2013/02/12354.html nmap 是一个用于网络探索或安全评测的工具.它支持 ping 扫描(判定哪些主机在运行),多端口扫描技术(判 ...

  4. 阶段3 1.Mybatis_02.Mybatis入门案例_3.mybatis注解开发和编写dao实现类的方式

    注解的用法 直接创建一个新的项目 下一步直接next 然后finish即可 把之前项目01里面的代码直接复制过来 复制到我们02的注解的工程中 把01项目导入的依赖也都粘贴过来 再把测试类复制过去 复 ...

  5. 【工具使用】kali 安装后要做的事情

    日期:2019-07-17 10:43:40 介绍:修改分辨率.修改时区.修改源 0x01. 修改分辨率 kali 在安装完成之后,分辨率过低,需要修改分辨率.  然后依次选择 [settings] ...

  6. 转:【开源必备】常用git命令

    原文:https://zhuanlan.zhihu.com/p/25868120 [开源必备]常用git命令 [已重置]   如今在技术领域,码农们习惯了开源,也离不开免费开源的代码,轻松获取代码,不 ...

  7. CSS3——表单 计数器 网页布局 应用实例

    CSS应用实例 表单 实例 输入框样式 输入框填充-----内边距 输入框------边框 输入框-----颜色 输入框-----聚焦 输入框-------图标 输入框------动画 [自动右滑] ...

  8. 手写一个IOC容器

    链接:https://pan.baidu.com/s/1MhKJYamBY1ejjjhz3BKoWQ 提取码:e8on 明白什么是IOC容器: IOC(Inversion of Control,控制反 ...

  9. SpringMVC 的Model值传到JSP页面中,用EL表达试取不到值

    解决方案 在jsp文件头 <%@ page isELIgnored="false" %>

  10. 【Linux 环境搭建】Ubuntu下安装tftp

    1.安装软件    sudo apt-get install tftp-hpa tftpd-hap xinetd 2.修改配置文件    sudo vim /etc/default/tftpd-hpa ...