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

1、ApplicationContextInitializer的作用

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

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

可以通过order接口进行排序

2、进入run方法

进入准备上下文prepareContext方法

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

getInitializers返回所有的初始化器。

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

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

实例化SpringApplication时设置setinitializers

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

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

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

2)进入DelegatingApplicationContextInitializer类

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

然后进入applyInitializerClasses方法

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

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

进入applyInitializers方法

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

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




原文地址:https://www.cnblogs.com/linlf03/p/12271258.html

时间: 2024-11-05 14:51:59

Spring Boot 系统初始化器是如何别调用的,以及实现原理的相关文章

Spring Boot 系统初始化器

1.Spring Boot 系统初始化器 系统初始化器介绍 SpringFactoriesLoader介绍 系统初始化器原理 总结 2.系统初始化器介绍 类名: ApplicationContextinitializer 介绍: Spring容量刷新之前执行的一个回调函数 作用: 向SpringBoot容器中注册属性 使用:继承接口自定义实现 3.系统初始化器实践 1)创建初始化器 在包initializer下创建FirstInitializer /** * * 第一个系统初始化器 */ @Or

一起学习springboot源码(系统初始化器)

一.介绍 在初始化过程中,会进行配置系统初始化器 1.类名:ApplicationContextInitializer 2.介绍:他是spring容器刷新之前执行的一个回调函数 3.作用:向springboot容器中注册属性 4.使用:继承接口自定义实现 系统初始化器是springboot框架预留的一个扩展点,通过它我们可以在springboot容器刷新之前来向我们的容器中来注册属性 二.实现一个自定义初始化器,直接上代码 自定义初始化器,实现ApplicationContextInitiali

spring boot 1.5.4 定时任务和异步调用(十)

上一篇:spring boot1.5.4 统一异常处理(九) 1      Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. spring boot定时任务spring-boot-jsp项目源码: https://git.oschina.net/wyait/springboot1.5.4.git 1.1  创建定时任务 在Spring Boot中编写定时

Spring Boot之拦截器与过滤器(完整版)

作者:liuxiaopeng 链接:http://www.cnblogs.com/paddix 作者:蓝精灵lx原文:https://blog.csdn.net/liuxiao723846/article/details/80656492 参考以上两位作者文章链接进行实验整合,仅供学习交流 一.拦截器与过滤器 先理解一下AOP的概念,AOP不是一种具体的技术,而是一种编程思想. 在面向对象编程的过程中,我们很容易通过继承.多态来解决纵向扩展. 但是对于横向的功能,比如,在所有的service方法

spring boot 添加拦截器

构建一个spring boot项目. 添加拦截器需要添加一个configuration @Configuration @ComponentScan(basePackageClasses = Application.class, useDefaultFilters = true) public class ServletContextConfig extends WebMvcConfigurationSupport { 为了方便扫描位置,我们可以写一个接口或者入口类Application放置于最外

【第四十章】Spring Boot 自定义拦截器

1.首先编写拦截器代码 package com.sarnath.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Service; import org.springframework.web.servlet.HandlerInterceptor; import

spring boot的初始化加载

1.CommandLineRunner在项目中经常需要进行初始化一些数据(比如缓存等),以便后面调用使用.spring boot可以通过CommandLineRunner接口实现启动加载功能. @Component @Order(1) //初始化加载优先级 数字越小优先级越高 public class Init implements CommandLineRunner { @Resource private IESignInitService eSignInitService; @Overrid

spring boot 配置拦截器验证使用 token 登录

1.自定义登录注解 package io.xiongdi.annotation; import java.lang.annotation.*; /** * @author wujiaxing * @date 2019-07-12 * 登录校验 */ @Target(ElementType.METHOD) @Documented @Retention(RetentionPolicy.RUNTIME) public @interface Login { } 2.创建 token 实体类 packag

Spring Boot 系统要求

Spring Boot 2.1.0.RELEASE 方需要 Java 8 or 9 的支持和 Spring Framework 5.1.2.RELEASE 以上的版本. 明确的构建工具的支持,请参考下面的构建工具: 构建工具 版本 Maven 3.3+ Gradle 4.4+ Servlet 容器 Spring Boot 支持下面的嵌入 servlet 容器: 名字 Servlet 版本 Tomcat 9.0 4.0 Jetty 9.4 3.1 Undertow 2.0 4.0 你也可以将 Sp