当前位置: 首页 > 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.pierceye.com/news/65560/

相关文章:

  • 安庆市住房和建设厅网站首页重庆中企动力科技股份有限公司怎么样
  • Php做网站要求开源短视频sdk推荐
  • 网站开发项目中的rd免费建站哪个网站最好
  • ios手机网站建设自己做开箱网站
  • 温州服务网站建设潜江做网站
  • 专业烟台房产网站建设极简风wordpress主题
  • 西安搬家公司电话附近联系方式吉林seo快速排名
  • 南阳旅游网站建设现状石家庄效果图设计
  • 建设银行网站打不开站群优化公司
  • 团建网站天津市建设银行租房网站
  • 推广型网站建设机构怎样让google收录网站
  • 外贸网站有必要吗中山网站排名推广
  • wordpress列表显示文章网站seo排名优化方法
  • 网站被k查询在线培训考试系统
  • 网站虚拟空间过期武胜网站建设
  • 注册公司查名字哪个网站上海网站建设公司推荐排名
  • 哈尔滨优质官网建站企业商城二次开发
  • 济南市住房城乡建设网站网站返回顶部代码
  • 网站挂马处理百度快照深圳机场最新消息今天
  • 国家建设部门三类人员官方网站查看网站开发语言方法
  • 网站面试通知表格怎么做lamp和wordpress
  • 哪些网站做简历合适网络广告的形式有哪些
  • 福清网站商城建设各网站的网络联盟
  • 网站建设网络推广首选公司衡阳购物网站开发案例
  • php+ajax网站开发典型实例 pdf网站建设体会doc
  • 小程序开发外包该注意些什么2019做seo网站
  • 网站做跳转怎么做清远专业网页设计培训报价
  • 奉贤广州网站建设外贸手机网站建设
  • 网站菜单导航制作网站备案拍照要求
  • 网站建设详细合同范本网站维护入门教程