SpringBoot学习笔记-7:第七章 Spring Boot 启动配置原理-阿里云开发者社区

开发者社区> 开发者小助手-bz7> 正文

SpringBoot学习笔记-7:第七章 Spring Boot 启动配置原理

简介: SpringBoot学习笔记-7:第七章 Spring Boot 启动配置原理
+关注继续查看

第七章 Spring Boot 启动配置原理

启动原理,运行流程,自动配置原理

run()

  • 准备环境
    • 执行 ApplicationContextInitializer.initialize()
    • 监听器 SpringApplicationRunListener 回调 contextPrepared
    • 加载主配置类定义信息
    • 监听器 SpringApplicationRunListener 回调 contextLoaded
  • 刷新启动 ICO 容器
  • 扫描加载所有容器中的组件

包括从 META-INF/spring.factories 中获取所有 EnableAutoConfiguration 组件


回调容器中所有的 ApplicationRunner/CommandLineRunner 的 run 方法

监听器 SpringApplicationRunListener 回调 finished


监听器配置示例

配置目录:

src/main/java/com/example/demo/listener/
  - MyApplicationContextInitializer.java
  - MySpringApplicationRunListener.java
  - MyApplicationRunner.java
  - MyCommandLineRunner.java

实现类

package com.example.demo.listener;

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;

public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("MyApplicationContextInitializer initialize" + applicationContext);
    }
}
package com.example.demo.listener;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

public class MySpringApplicationRunListener implements SpringApplicationRunListener {
    public MySpringApplicationRunListener(SpringApplication application, String[] args) {
    }

    @Override
    public void starting() {
        System.out.println("MySpringApplicationRunListener starting");
    }

    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        Object name = environment.getSystemProperties().get("os.name");
        System.out.println("environmentPrepared" + name);
    }

    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("contextPrepared");
    }

    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("contextLoaded");
    }

    @Override
    public void started(ConfigurableApplicationContext context) {
        System.out.println("started");
    }

    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        System.out.println("failed");
    }

    @Override
    public void running(ConfigurableApplicationContext context) {
        System.out.println("running");
    }
}
package com.example.demo.listener;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;


@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("MyApplicationRunner");
    }
}
package com.example.demo.listener;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;


@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("MyApplicationRunner");
    }
}

src/main/resources/META-INF/spring.factories

org.springframework.boot.SpringApplicationRunListener=\
com.example.demo.listener.MySpringApplicationRunListener

org.springframework.context.ApplicationContextInitializer=\
com.example.demo.listener.MyApplicationContextInitializer

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8404 0
spring源码学习之:xml标签扩展配置例子
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙。一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐, 特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。
1500 0
CentOS 6.5 NFS的安装配置、启动及mount挂载方法
yum -y install nfs-utils rpcbind [root@centos2 /]# mkdir /usr/local/test 2、NFS文件配置: [root@centos2 /]# vi /etc/exports #增加一行: /usr/local/test/ 192.
885 0
spring源码学习之:xml配置文件标签自定义
Spring框架从2.0版本开始,提供了基于Schema风格的XML扩展机制,允许开发者扩展最基本的spring配置文件(一 般是classpath下的spring.xml)。试想一下,如果我们直接在spring.xml中加入一个自定义标签,会发生什么呢?spring框架启动的时候会报错,因为spring根本不认识我们自定义的& lt;mytag>,这样对spring.xml的校验就会失败,最终结果就是框架不能启动。
1558 0
697
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载