当前位置: 首页 > news >正文

山东网站建设网站凯里网站设计公司

山东网站建设网站,凯里网站设计公司,教务系统,无锡网站建设公司Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》#xff0c;我们…Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》我们从 Spring Boot 的启动类 SpringApplication 上入手了解了 SpringApplication 实例化过程。其中《BootstrapRegistryInitializer 详解》 博文中Huazie 已经带大家详细分析了 BootstrapRegistryInitializer 的加载和初始化过程如下还有 2.4 和 2.5 这两处还未详细分析 那本篇博文就主要围绕 2.4 的内容展开详细分析一下ApplicationContextInitializer 加载和初始化逻辑。 往期内容 在开始本篇的内容介绍之前我们先来看看往期的系列文章【有需要的朋友欢迎关注系列专栏】 Spring Boot 源码学习 Spring Boot 项目介绍 Spring Boot 核心运行原理介绍 【Spring Boot 源码学习】EnableAutoConfiguration 注解 【Spring Boot 源码学习】SpringBootApplication 注解 【Spring Boot 源码学习】走近 AutoConfigurationImportSelector 【Spring Boot 源码学习】自动装配流程源码解析上 【Spring Boot 源码学习】自动装配流程源码解析下 【Spring Boot 源码学习】深入 FilteringSpringBootCondition 【Spring Boot 源码学习】OnClassCondition 详解 【Spring Boot 源码学习】OnBeanCondition 详解 【Spring Boot 源码学习】OnWebApplicationCondition 详解 【Spring Boot 源码学习】Conditional 条件注解 【Spring Boot 源码学习】HttpEncodingAutoConfiguration 详解 【Spring Boot 源码学习】RedisAutoConfiguration 详解 【Spring Boot 源码学习】JedisConnectionConfiguration 详解 【Spring Boot 源码学习】初识 SpringApplication 【Spring Boot 源码学习】Banner 信息打印流程 【Spring Boot 源码学习】自定义 Banner 信息打印 【Spring Boot 源码学习】BootstrapRegistryInitializer 详解 主要内容 注意 以下涉及 Spring Boot 源码 均来自版本 2.7.9其他版本有所出入可自行查看源码。 1. 初识 ApplicationContextInitializer 我们先来看看 ApplicationContextInitializer 接口的源码 FunctionalInterface public interface ApplicationContextInitializerC extends ConfigurableApplicationContext {void initialize(C applicationContext); }从上述代码我们可以看到 ApplicationContextInitializer 接口被 FunctionalInterface 注解修饰。 知识点 FunctionalInterface 是 Java 8 中引入的一个注解用于标识一个函数式接口。函数式接口是只有一个抽象方法的接口常用于实现 Lambda 表达式和方法引用。 使用 FunctionalInterface 注解可以向编译器指示该接口是一个函数式接口从而在编译时进行类型检查确保该接口 只包含一个抽象方法。此外该注解还可以为函数式接口生成特殊的方法如默认方法default method和 静态方法static method这些方法可以在接口中提供更多的功能这里就不赘述了感兴趣的朋友可以自行查阅相关函数式接口的资料。 ApplicationContextInitializer 是个回调接口它只包含一个 initialize 方法该方法用来初始化给定的应用程序上下文即它的唯一参数 applicationContext。它用于在刷新之前初始化 Spring ConfigurableApplicationContext。通常用于需要在应用程序上下文中进行一些程序化初始化的 Web 应用程序。例如注册属性源或激活与上下文环境相关的配置文件。请参阅 ContextLoader 和FrameworkServlet 支持它们分别支持声明 contextInitializerClasses 上下文参数和初始化参数。建议使用 ApplicationContextInitializer 处理器检测是否实现了 Spring 的 Ordered 接口或者是否存在Order 注解并在调用之前根据这些信息对实例进行排序。 2. 加载 ApplicationContextInitializer setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));上述代码是 SpringApplication 的核心构造方法中的逻辑它用于加载实现了 ApplicationContextInitializer 接口的类的集合并将该集合设置到 SpringApplication 的 initializers 变量中。 private ListApplicationContextInitializer? initializers;我们进入 getSpringFactoriesInstances 方法查看如下 我们看到了如下的代码 SpringFactoriesLoader.loadFactoryNames(type, classLoader);这里是通过 SpringFactoriesLoader 类的 loadFactoryNames 方法来获取 META-INF/spring.factories 中配置 key 为 org.springframework.context.ApplicationContextInitializer 的数据 我们以 spring-boot-autoconfigure-2.7.9.jar 为例 # Initializers org.springframework.context.ApplicationContextInitializer\ org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\ org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener3. ApplicationContextInitializer 的初始化 这里我们需要查看 SpringApplication 的 run(String... args) 方法如下所示 在上述的 prepareContext 方法中就能看到 ApplicationContextInitializer 的初始化我们继续往下看 上述截图中我们继续看 applyInitializers 方法 到这步已经很清楚了上述 applyInitializers 方法中 通过 getInitializers 方法获取了 SpringApplication 的 initializers 变量即实现了 ApplicationContextInitializer 接口的集合。 遍历 ApplicationContextInitializer 接口的集合循环操作 initializer 的初始化 通过 GenericTypeResolver##resolveTypeArgument 方法来解析 initializer 对象中的泛型类型参数并赋值给 requiredType 变量。通过 Assert##isInstanceOf 方法来检查 context 对象是否是requiredType 类型的实例。如果不是那么会抛出一个异常异常信息为 “Unable to call initializer.”调用 ApplicationContextInitializer 接口的 initialize 方法初始化给定的应用上下文对象 context。 总结 本篇 Huazie 带大家详细分析了 ApplicationContextInitializer 的加载和初始化 逻辑这对于后续的 SpringApplication 运行流程的理解至关重要。
http://wiki.neutronadmin.com/news/354125/

相关文章:

  • 建设母婴网站的目的单页网站上传教程
  • 两学一做知识竞赛网站国外域名注册商哪家好
  • wap php网站源码中国建筑网官网云筑网
  • 旅游网站建设的现状温州seo优化
  • 做微信头图的网站asp响应式h5网站源码下载
  • 自己网站怎么做优化wordpress 媒体库无法打开
  • wordpress标签聚合美化指定词整站优化
  • 曲靖做网站鲁班建设网站
  • 东莞皮具网站建设北京住房城乡建设厅网站首页
  • 网站被墙 做301跳转重庆医院网站建设
  • 开发wap网站 转网页数据库系统怎么做
  • 网站开发是属于哪个税收分类网站的积分系统怎么做的
  • 怎么自己制作一个网站长春百度快速优化
  • 网站建设流程图片公司只有一个设计师
  • 网站建设之开展电子商务wordpress最近怎么又是5.0更新
  • xp怎么做网站服务器2003系统做网站
  • 网页做网站的尺寸wordpress 验证账号
  • 母婴会所网站建设wordpress增加模板
  • 自助建站免费永久茶山网站建设
  • 运营公开网是什么网站爱企查注册公司
  • asp源码自助建站安仁网络推广软件定制开发
  • 小程序网站开发做网站需要多钱
  • app自助建站网络外包运营公司
  • 湛江市建设教育协会学校网站报社网站建设方案
  • 网站开发合同 黑客攻击条款聊城宏远网站建设优化
  • 网站flash音乐播放器网站IcP在哪查
  • 厦门企业建站系统模板网站建设要学哪些软件有哪些方面
  • 秦皇岛网站备案专业的建设网站哪个好
  • 定远网站开发做网站首选智投未来1
  • 中建一局华江建设有限公司网站网站建设加推广