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

青岛建设厅官方网站黄埔做网站的公

青岛建设厅官方网站,黄埔做网站的公,平面设计网站大全网站,网站空间怎么做Spring Boot 源码学习系列 BootstrapRegistryInitializer 详解 引言往期内容主要内容1. 初识 BootstrapRegistryInitializer2. 加载 BootstrapRegistryInitializer3. BootstrapRegistryInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》#xff0c;我们从 …Spring Boot 源码学习系列 BootstrapRegistryInitializer 详解 引言往期内容主要内容1. 初识 BootstrapRegistryInitializer2. 加载 BootstrapRegistryInitializer3. BootstrapRegistryInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》我们从 Spring Boot 的启动类 SpringApplication 上入手了解了 SpringApplication 实例化过程。其中有如下三块内容还未详细分析 本篇博文就主要围绕 2.3 的内容展开详细分析一下加载并初始化 BootstrapRegistryInitializer 及其相关的类的逻辑。 往期内容 在开始本篇的内容介绍之前我们先来看看往期的系列文章【有需要的朋友欢迎关注系列专栏】 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 源码 均来自版本 2.7.9其他版本有所出入可自行查看源码。 1. 初识 BootstrapRegistryInitializer 废话不多说我们直接来看 BootstrapRegistryInitializer 接口的源码 FunctionalInterface public interface BootstrapRegistryInitializer {void initialize(BootstrapRegistry registry); }阅读上述代码可以看到 BootstrapRegistryInitializer 接口被 FunctionalInterface 注解修饰。 FunctionalInterface 是 Java 8 中引入的一个注解用于标识一个函数式接口。函数式接口是只有一个抽象方法的接口常用于实现 Lambda 表达式和方法引用。 使用 FunctionalInterface 注解可以向编译器指示该接口是一个函数式接口从而在编译时进行类型检查确保该接口 只包含一个抽象方法。此外该注解还可以为函数式接口生成特殊的方法如默认方法default method和 静态方法static method这些方法可以在接口中提供更多的功能这里就不赘述了感兴趣的朋友可以自行查阅相关函数式接口的资料。 BootstrapRegistryInitializer 接口只定义了一个 initialize 方法该方法只有一个参数是 BootstrapRegistry BootstrapRegistry 是一个简单的对象注册表它在启动和环境后处理期间都可用直到ApplicationContext 准备好为止。它可用于注册可能创建成本较高或在 ApplicationContext 可用之前需要共享的实例。它的一个默认实现是 DefaultBootstrapContext 后面我们会看到。 注册表使用 Class 作为键这意味着每个给定类型只能存储一个实例。 addCloseListener(ApplicationListener) 方法可用于添加监听器当 BootstrapContext 已关闭并且 ApplicationContext 完全准备好时该监听器可以执行操作。例如一个实例可能选择将自己注册为常规的 Spring bean以便应用程序可以使用它。 简而言之BootstrapRegistry 是一个用于存储和共享对象的注册表这些对象在ApplicationContext 准备好之前就可能已经被创建并需要被共享。 在 Spring Cloud Config 中客户端通过向配置中心Config Server发送请求来获取应用程序的配置信息。而 BootstrapRegistryInitializer 就是负责将配置中心的相关信息注册到 Spring 容器中的。 2. 加载 BootstrapRegistryInitializer this.bootstrapRegistryInitializers new ArrayList(getSpringFactoriesInstances(BootstrapRegistryInitializer.class));上述代码是 SpringApplication 的核心构造方法中的逻辑它用于加载实现了 BootstrapRegistryInitializer 接口的类。 我们进入 getSpringFactoriesInstances 方法查看如下 我们看到了如下的代码 SpringFactoriesLoader.loadFactoryNames(type, classLoader);这里是通过 SpringFactoriesLoader 类的 loadFactoryNames 方法来获取 META-INF/spring.factories 中配置 key 为 BootstrapRegistryInitializer 的数据 当然这些配置不在 Spring Boot 的 META-INF/spring.factories 中我们上面提到 Spring Cloud Config 就是用 BootstrapRegistryInitializer 将配置中心的相关信息注册到 Spring 容器中那我们就来看看 Spring Cloud Config 相关的配置。 如下是 Spring Cloud Config 的 Starter 依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-config/artifactIdversion4.0.4/version /dependency导入上述依赖之后相关的 META-INF/spring.factories 配置我们发现是在如下的 jar 包里面【spring-cloud-config-client-4.0.4.jar】 查看 META-INF/spring.factories 配置文件我们可以看到如下 # Spring Boot BootstrapRegistryInitializers org.springframework.boot.BootstrapRegistryInitializer\ org.springframework.cloud.config.client.ConfigClientRetryBootstrapper有关 Spring Cloud Config 的内容这里就不展开介绍了感兴趣的小伙伴自行查阅 Spring Cloud Config 的官方文档。 3. BootstrapRegistryInitializer 的初始化 这里我们需要查看 SpringApplication 的 run(String... args) 方法如下所示 在上述的 createBootstrapContext 方法中就对 BootstrapRegistryInitializer 进行初始化我们继续往下看 从上图中我们可以看到这样一行代码 this.bootstrapRegistryInitializers.forEach((initializer) - initializer.initialize(bootstrapContext));这里涉及如下的知识点 this.bootstrapRegistryInitializers.forEach() : Java 8 的 Stream API它用于遍历列表中的每个元素并执行给定的操作【即 initializer.initialize(bootstrapContext) 】。(initializer) - initializer.initialize(bootstrapContext) Lambda 表达式这是 Java 8 引入的一个新特性允许以更简洁的方式表示匿名方法。它表示一个接受BootstrapRegistryInitializer 类型参数 initializer并调用其 initialize(bootstrapContext) 方法的功能。 简而言之对于 this.bootstrapRegistryInitializers 列表中的每个 BootstrapRegistryInitializer使用当前的 bootstrapContext 初始化它。这里的 bootstrapContext 其实就是 BootstrapRegistry 注册表的一个默认实现 DefaultBootstrapContext 。 从上述的 SpringApplication 的 run(String... args) 方法源码中我们也可以看出 BootstrapRegistryInitializer 的初始化是在 Spring Boot 应用启动一开始进行的。 我们通过实现 BootstrapRegistryInitializer 接口并定义 initialize 方法可以将自定义的 Bean 初始化器注册到 ApplicationContext 中。这样在 Spring Boot 应用启动时这些初始化器会被自动加载并执行从而完成一些必要的初始化配置。 总结 本篇 Huazie 带大家详细分析了加载并初始化 BootstrapRegistryInitializer 的逻辑这对于后续的 SpringApplication 运行流程的理解至关重要。
http://www.zqtcl.cn/news/65560/

相关文章:

  • 成都地区网站开发成本猎头公司好做吗
  • 自建网站投放广告网页浏览设置在哪里打开
  • 常州做企业网站智联网最新招聘官网
  • 常州网站建设方案托管可以在公司局域网做网站吗
  • 网站的推广个人做网站猛赚钱
  • 网站建设包含建设网站虚拟主机是啥意思
  • 石家庄市市政建设总公司网站seo模板建站
  • 赣州专业网站推广哪家好企业邮箱怎么查看
  • 郑州网站建设商城定制如何做一个微信公众号
  • 如何建一个免费网站一般做网站销售提成
  • 北京规划网站wordpress接单修改任务
  • 芜湖市建设办网站wordpress 去掉主题
  • ssh网站开发正规排名网站推广公司
  • h网站建设百度网站的总结
  • 网站制作400哪家好physon可以做网站
  • 用图片做简单网站厦门唯一官方网站
  • 90设计网站官网入口深圳小企业网站建设
  • 义乌网站建设制作群晖外网打开wordpress
  • 做公司网站怎么推广wordpress调用评论数
  • 律师网站设计山西太原百度公司
  • 做视频网站要用到的服务器网站建设公司客户来源渠道
  • 企业自建网站劣势娱乐网站设计SEO
  • 做网站项目时 需求分析的内容推拿网站制作
  • 电脑做网站空间tk网站免费
  • 网站栏目页描述怎么写wordpress视频 小程序
  • 网站技术建设方案互联网电子商务网站开发技术
  • 怎么查询网站是什么时候做的湖南网站设计外包费用
  • 上海 建网站网页美工设计教案网页元素设计
  • 济南一哥网站建设公司网站开发项目教程答案
  • 网站网页制作机构wordpress 小说插件