• Spring Boot 系统初始化器是如何被调用的,以及实现原理


    1、ApplicationContextInitializer的作用

    上下文刷新即refresh方法前调用

    用来编码设置一些属性变量通常用在web环境中

    可以通过order接口进行排序

    2、进入run方法

    1) 进入准备上下文prepareContext方法

     2) 进入applyInitializers方法。遍历所有的初始化器,并调用对应初始化器的initialize方法

     getInitializers返回所有的初始化器。

    public Set<ApplicationContextInitializer<?>> getInitializers() {
    return asUnmodifiableOrderedSet(this.initializers);
    }


    3、系统初始器方式二的实现原理
    实现方式二如下图:

     1)实例化SpringApplication时设置setinitializers

    2) 通过springApplication.addInitializers(new SecondInitializer()); 增加自定义的初始化器

     3)然后是springApplication.run(args);的run方法 。和方式一的run方法是同一个。

    4、系统初始器方式三的实现原理
    方式三是通过在application.properties 文件中添加配置context.initializer.classes=com.example.demo.initializer.ThirdInitializer来实现的。
    这个主要是通过DelegatingApplicationContextInitializer初始化器来实现的
    这个类DelegatingApplicationContextInitializer定义在SpringBoot中

    1)进入DelegatingApplicationContextInitializer类

    可以看到DelegatingApplicationContextInitializer里的order=0。这个初始化器最先被调到。

    2)然后进入applyInitializerClasses方法

    利用instantiateInitializer方法初始化这个类。

    instantiateInitializer里面其实是用BeanUtils来初始化类

    3)  进入applyInitializers方法

     4、三种实现初始化器的实现原理

    方式一:定义在spring.factories 文件中被SpringFactoriesLoader发现注册
    方式二:初始化完毕手动添加
    方式三: 定义成环境变量被DelegatingApplicationContextInitializer发现注册



    
    
  • 相关阅读:
    Tomcat通过脚本自动部署
    【转】调用百度API,HTML在线文字转语音播报
    vim 多行注释消除注释,多行删除
    sublime快捷键
    引号-下划线,连接多个变量
    图片压缩工具optipng/jpegoptim安装
    netsh-winsock-reset;ping的通公网IP和DNS地址和内网网关,就是不能解析域名;
    mysql简单性能排查
    nginx-upstream-keepalive;accept_mutex-proxy_http_version-1.1-proxy_set_header-connection
    icmp,tcp,traceroute,ping,iptables
  • 原文地址:https://www.cnblogs.com/linlf03/p/12271258.html
Copyright © 2020-2023  润新知