SpringBoot自动配置理解

2023-11-08

首先,所有的启动类中都有一个@SpringBootApplication注解:

放置在Springboot启动类上,表明该类是开启Springboot容器的入口,它是一个复合注解。里面包含了包扫描,自动注入,配置注入的功能。

按Ctrl+鼠标左键点击进入此注解,可以看到这个复合注解包含的注解有:

 

其中,有一个@EnableAutoConfiguration注解:

其作用就是帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。

具体机制如下图:

1.首先进入@EnableAutoConfiguration注解,其内部有如下注解

我们可以看到其内部导入了一个AutoConfigurationImportSelector.class的类

点击进入此类,可以发现:通过getAutoConfigurationEntry()获取了所有的实体

而实体从哪获得的呢,就是通过下面的 getCandidateConfigurations()获取候选的配置

而候选的配置从哪获取呢?就是从 getCandidateConfigurations()中的getBeanClassLoader()获取:

 以及

获取标注了 @EnableAutoConfiguration注解下的所有类

接着通过SpringFactoriesLoader.loadFactoryNames()方法加载配置

loadFactoryNames()中又通过loadSpringFactories()加载配置

而loadSpringFactories()又从获取的资源中遍历所有的url

这个 FACTORIES_RESOURCE_LOCATION资源指向的就是META-INF下的spring.factories

也就是AutoConfiguration下的META-INF下的spring.factories:

 

 

它将读取到的资源封装到properties中,最后返回让我们能够使用

 

 总结:

 1).SpringBoot启动会加载大量的自动配置类
 2)、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
 3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就          不需要再手动配置了)
 4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置          文件中指定这些属性的值即可;
        xxxxAutoConfigurartion:自动配置类;给容器中添加组件

         xxxxProperties:封装配置文件中相关属性;

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot自动配置理解 的相关文章

  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • Hibernate 挂起或引发延迟初始化,没有会话或会话已关闭

    我正在增强旧的 Spring Hibernate 应用程序 但我陷入困境 我有一种方法可以读取 3000 多行长的文件 每行都有一条记录 必须与数据库中的某些内容进行比较 然后必须将寄存器添加到数据库 多对多表 表和关系是 Branch h
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在 Spring-JUnit 测试中设置 JNDI 查找?

    我正在使用 Maven 3 0 3 Spring 3 1 0 RELEASE 和 JUnit 4 8 1 如何在容器外部创建 JNDI 功能 在我的例子中是 JBoss 我认为 Spring 的 jndiTemplate 可以解决这个问题
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类

随机推荐

  • 一键部署openvpn服务端和客户端(已写成脚本)

    openvpn 容器安装 需要有docker compse和docker docker和docker compse一键脚本 bin bash 添加DNS echo MASTER IP HOSTNAME gt gt etc hosts DNS
  • SpringCloud + xxl-job 任务调度的简单使用

    概述 xxl job是一个轻量级分布式任务调度平台 其核心设计目标是开发迅速 学习简单 轻量级 易扩展 之前开发的SpringCloud项目 因为其中有个应用有几个定时任务 为了统一管理和更可视化以及监控提醒于是加入了xxl job 好了
  • 【手写一个RPC框架】simpleRPC-07

    目录 前言 实现 zookeeper 项目创建 依赖配置 loadbalance register client codec common service server 文件结构 运行 本项目所有代码可见 https github com
  • stm32之IIC协议

    主要通过两个层面来讲 物理层 协议层 IIC是一个同步半双工串行总线协议 一 物理层 通信模型 1 最早是飞利浦公司开发的这个协议 最早应用到其产品上去 2 两线制 两根信号线 其中SCL为时钟线 SDA为数据线 3 挂载在IIC总线上的设
  • 在SQL Server中从所有表或所有数据库中搜索关键字

    从所有表及所有库中搜索关键字 在所有表中搜索关键字 declare str varchar 100 set str a 要搜索的字符串 declare s varchar 8000 declare tb cursor local for s
  • 【100%通过率 】【华为OD机试 c++/java/python】计算数组中心位置【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给你一个整数数组nums 请计算数组的中心位置 数组的中心位置是数组的一个下标 其左侧所有元素相乘的积等于右侧所有元素相乘的积 数组第一个元素的
  • aws-msk-托管kafka集群的简单使用(VPC内部访问:无验证和SASL认证)

    1 使用控制台创建即可 根据实例类型创建需要至少15分以上 可以提前创建好ec2实例和Secrets Manager 一会会使用到 2 创建Secrets Manager 使用无认证时请跳过 官方文档 https docs aws amaz
  • 基础算法题——Classical String Problem(字符环)

    Classical String Problem 题意 给定字符串S由小写字母组成 执行Q次操作 每个操作都可以是以下两种类型之一 M 修改 给定一个整数x 您需要根据x的值修改S 如果x是正的 则将 S 字符串中左边的 x 个字母移动到S
  • [k8s] pod的创建过程

    pod的创建过程 定义 Pod 的规范 apiVersion v1 kind Pod metadata name my pod spec containers name my container image nginx latest 创建
  • lnmp 域名绑定与设置

    该文字转载自 https lnmp org faq lnmp vhost add howto html 感谢广大网友的分享 一般情况下每个虚拟主机就是一个网站 网站一般通过域名进行访问 本文为教程适合LNMP 1 2 各个版本的添加过程基本
  • 恒玄BES调试笔记-BES2500如何修改RF回连功率

    修改路径如下 platform drivers bt best2300a bt drv rfconfig c 可以通过以上截图 写固定的某个值 比如0x18f 写0xaf为RF回连功率调整0dB 这个寄存器具体的BES2500 RF Reg
  • 记录使用git时碰到的问题及解决办法

    fatal refusing to merge unrelated histories git pull allow unrelated histories 本地和github上分别生成了master和main分支 四步 参考https z
  • js弹出框、对话框、提示框、弹窗总结

    一 JS的三种最常见的对话框 JS最常用三种弹出对话框 弹出对话框并输出一段提示信息 function ale 弹出一个对话框 alert 提示信息 弹出一个询问框 有确定和取消按钮 function firm 利用对话框返回的值 true
  • 架构核心技术之微服务架构

    小熊学Java https www javaxiaobear cn 文末有免费资源 本文我们来学习微服务的架构设计 主要包括如下内容 单体系统的困难 编译部署困难 数据库连接耗尽 服务复用困难 新增业务困难 微服务框架 Dubbo 和 Sp
  • strerror函数运行时报错 Segmentation fault (core dumped)

    虽然编译时没报错 但还是要加上以下头文件 include
  • 优化SQL之最佳索引

    SQL优化工具Tosska SQL Tuning Expert for Oracle 帮助SQL开发人员解决SQL性能问题 本工具主要创始人Richard To 资深ITPUB元老 从1996年开始设计SQL优化工具 拥有超过20年的SQL
  • css核心知识点攻坚指南

    css核心知识点攻坚指南 一 什么是CSS 层叠样式表 英文全称 Cascading Style Sheets 是一门专门用来描述 html xml 等文件样式的一门语言 简而言之 我们可以通过编写css来描述当前文档的样式规则 让页面的展
  • Java Swing实现Mybatis3代码生成器,使用jtattoo第三方java Swing美化包

    项目介绍 代码生成器 目前只支持MySQL 其他的数据库需要在代码中修改部分配置以及更换JDBC驱动 整个项目从MySQL数据库连接测试 创建数据库 导入SQL脚本 保存基本配置 生成最后代码 适合初学swing的开发人员 本项目使用jta
  • 电巢科技出席第26届西北地区电子技术与线路课程教学改革研讨会,聚焦一流课程建设!

    2023年9月15日至17日 北方民族大学召开第26届西北地区电子技术与线路课程教学改革研讨会 本次会议围绕 梳理课程教学内容 改革教学方式 探索虚拟教研室构建方式 完善基层教学组织 推进一流课程和一流教材资源共享 提高课程教学质量 这些主
  • SpringBoot自动配置理解

    首先 所有的启动类中都有一个 SpringBootApplication注解 放置在Springboot启动类上 表明该类是开启Springboot容器的入口 它是一个复合注解 里面包含了包扫描 自动注入 配置注入的功能 按Ctrl 鼠标左