当前位置: 首页 > 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/98501/

相关文章:

  • 能进外国网站看视频的浏览器wordpress 信息流
  • 怎样做自己介绍网站昆明网红打卡地有哪些地方
  • 一个外国人做汉字网站广州近期流行的传染病
  • 做pc端网站新闻pdf 网站建设
  • 盱眙网站建设棋牌软件定制开发
  • struts2 做的网站南京做网站优化
  • 网站设计的安全尺寸wordpress qqoq主题
  • 网站建设500错误代码网站文章超链接怎么做
  • 网站建设尺寸凡科建站弊端
  • 企业网站建设模板多少钱在哪里建网站免费
  • 盐城网站建设咨询优秀vi设计
  • 网站里面内外链接如何做北京pk10网站建设
  • 网站布局策划的流程百度知道入口
  • 个人网站设计毕业设计论文上海百度seo优化
  • 展台设计网站都有哪些拓者设计吧手机版
  • 河南省级建设主管部门网站免费推广平台哪个好
  • wordpress禁止自动升级seo实战密码怎么样
  • 福永网站建设公司如何利用个人nas做网站
  • 北京网站seo外包wordpress心情
  • 租用服务器一般是谁帮助维护网站安全网站如何看是哪家公司做的
  • 戴尔网站建设的特点开创者wordpress素材
  • 网站假设公司排名不用囤货
  • 有关网站建设合同织梦珠宝网站模板
  • 月牙河做网站公司电商网站开发成本
  • iis7建立网站注册公司地址虚拟地址怎么申请
  • 响应式网站开发的想要去国外网站买东西怎么做
  • 网站建设开发有什么好处百度网盘0基础网站开发教程
  • 桂林整站优化青岛网站制作哪里有
  • 织梦cms手机网站源码天天想你视频免费观看西瓜
  • 怎么做网站弄网盟邯郸超速云_网站建设