Spring Boot系列03--自动配置原理

news2024/11/18 3:31:46

目录

    • 1. 相关注解
    • 2. 自动配置原理分析
    • 3. 自动配置图示

Spring Boot的核心优势:自动装配、约定大于配置。

1. 相关注解

@ConfigurationProperties(prefix = "前缀名")

该注解用于自动配置的绑定,可以将application.properties配置中的值注入到 Bean 对象上。该注解使用时必须将对象注入到 IOC 容器中才有配置绑定的功能。


@Component

该注解表示此类为Spring容器中的一个Bean,将该类交给Spring管理。


@Bean

该注解用于产生一个 Bean 对象,然后将该 Bean 对象交给 Spring 管理。SpringIOC 容器管理一个或者多个 Bean,这些 Bean 都需要在 @Configuration 注解下进行创建,在一个方法上使用 @Bean 注解就表明这个方法需要交给 Spring 进行管理。


@Configuration

该注解用于定义配置类,可替换 xml 配置文件,被注解的类内部包含有一个或多个被 @Bean 注解的方法,这些方法将会被相关类进行扫描,并用于构建 Bean、初始化 Spring 容器,并由 Spring 接管。


@EnableConfigurationProperties

该注解的作用是使使用 @ConfigurationProperties 注解的类生效。如果一个配置类只配置 @ConfigurationProperties 注解,而没有使用@Component,那么在IOC容器中是获取不到 properties 配置文件转化的 Bean。@EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。使用 @ConfigurationProperties 注解之后实体类就不需要再加上 @Component 注解。
例如:

 @EnableConfigurationProperties(MyConfigurationProperties.class)

该注解的作用是使 MyConfigurationProperties 这个类上标注的 @ConfigurationProperties 注解生效,并且会自动将这个类注入到 IOC 容器中。

2. 自动配置原理分析

Spring Boot 启动时会加载大量的自动配置类(下图文件中的Auto Configure部分,但是我的文件没发现),每一个 xxxAutoConfiguration 类都是容器中的一个组件,并且都会加入到容器中,这些自动配置类在某些条件之才会生效。
在这里插入图片描述

进入对应的 xxxAutoConfiguration 文件后,会有一个@EnableConfigurationProperties 注解,即开启配置属性,而它后面的参数是一个 xxxProperties 类。@EnableConfigurationProperties 的功能是进入xxxProperties 中查看,将配置文件中对应的值与 xxxProperties 中的属性绑定起来,并把对应组件加入到 IOC 容器中,因此所有和这个类相关的属性都可以在主配置文件中定义对应的值。

  • 过程讲解1
  • 过程讲解2

在这里插入图片描述

xxxAutoConfiguration:自动配置类,给容器中添加组件。XXXProperties:封装配置文件中相关属性。

容器启动的时候会加载很多自动配置类,但是这些自动配置类需在特定条件满足的情况下才会起作用,即必须是@Conditional指定的条件成立时,才将组件添加到容器,配置里面的所有内容才生效。通过启用配置文件中的 debug=true 属性可以让控制台打印自动配置报告,这样就可以很方便的知道哪些自动配置类生效。
生效的配置类:
在这里插入图片描述
未生效的配置类:
在这里插入图片描述

3. 自动配置图示

自动配置过程的简略图示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加油站ai系统视频监测 yolov5

加油站ai系统视频监测通过yolov5网络模型深度学习边缘计算技术,加油站ai系统视频监测对现场卸油过程中人员违规离岗、现场灭火器没有按要求正确摆放、以及卸油前需要遵守静电释放15分钟、打电话、明火烟雾情况、抽烟行为进行自动识别。YOLO系列算法是一类典型的one-…

九龙证券|不惧美联储重回鹰派,这个板块强势领涨!游戏才刚刚开始?

美联储开释鹰派信号,商场再度堕入博弈美元反弹的预期之中。 美联储近日发布的2月议息会议纪要显现,上行通胀危险是影响美联储前景的要害因素,在通胀持续回落至2%之前,需求采取限制性方针。叠加欧元区1月份中心通胀升至历史最高纪录…

Spring MVC 源码- HandlerExceptionResolver 组件

HandlerExceptionResolver 组件HandlerExceptionResolver 组件,处理器异常解析器,将处理器( handler )执行时发生的异常(也就是处理请求,执行方法的过程中)解析(转换)成对…

Python学习-----模块5.0(文件管理大师-->os模块)

目录 前言: 1.os.getcwd() 2. os.listdir(path) 3.os.walk(path) 4.os.path.exists(path) 5.os.mkdir(path) 6.os.makedirs(path,exist_okTrue) 7.os.rmdir(path) 8.os.remove(path) 9.os.path.join(p1,p2) 10.os.path.split(path) 11.os.path.isdi…

【python】类的详解

注:最后有面试挑战,看看自己掌握了吗 文章目录PO verses OOPOOO当一个类很复杂的时候,考虑多弄一个类的改造私有类的模块化静态类verses动态类动态类查看模块源代码对象机制的基石 PyObjectPO verses OO PO PO耦合性高,很多过程…

手写Android性能监测工具,支持Fps/流量/内存/启动等

App性能如何量化:如何衡量一个APP性能好坏?直观感受就是:启动快、流畅、不闪退、耗电少等感官指标,反应到技术层面包装下就是:FPS(帧率)、界面渲染速度、Crash率、网络、CPU使用率、电量损耗速度等&#xf…

Linux命令之awk

awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思) 语法 awk [option] 模式{动作} file option表示awk的可选参数,可…

mybatis与jpa

1、官方文档 mybatis:mybatis-spring – jpa:https://springdoc.cn/spring-data-jpa/ 应用文档 jpa详解_java菜鸟1的博客-CSDN博客 JPA简介及其使用详解_Tourist-xl的博客-CSDN博客_jpa的作用 2、使用比较 mybatis一般用于互联网性质的项目&#x…

zabbix4.0 Web页面配置 - 聚合图形的实现

目录 1、主机组Host groups配置 创建主机组 ​编辑 将一个主机添加至刚才创建的主机里面 2、用户参数UserParameter设置 示例: 添加一个参数:show.host.messages 模拟zabbix模板里面的参数再添加一个userparameter 3、触发器设置 示例: …

浏览器缓存之强缓存和协商缓存

为什么需要缓存? - 缓存的优点: 1.减少对服务器的访问次数,减轻了服务器的压力 2.节省用户网络带宽(就是省钱,带宽都是按流量算钱的) 3.从缓存读取更匀速减少等待优化了用户体验 - 缓存的缺点 资源被缓存后用户不能及时获取不到最新的资源,所以缓存不能乱用 强缓存 涉…

TypeScript快速上手语法+结合vue3用法

TypeScript快速上手语法结合vue3用法 前言: 本篇内容不涉及TypeScript安装以及配置,具体安装及配置篇可以看下面目录,本篇只涉及TypeScript语法相关内容,及结合vue3的用法。不讲废话,简单直接直接开撸。 目录 Type…

理想汽车--笔试(算法)

笔试分为选择题和编程题,选择题考的很全面,包括概率论、数据库、机器学习、python、数据结构。 选择题 1.在某些规划的分类器中,依据规划质量的某种度量对规划排序,保证每一个测试记录都是由覆盖它的‘最好的’规格来分类&#…

LeetCode-54. 螺旋矩阵

题目来源 54. 螺旋矩阵 题目思路 while循环只遍历"环"&#xff0c;不成环就不遍历了 四个边界 上边界 top : 0下边界 bottom : matrix.length - 1左边界 left : 0右边界 right : matrix[0].length - 1 矩阵不一定是方阵 top < bottom && left < r…

使用git从github.com中clone一个项目的源代码---git与github的安装配置与使用入门

本文目录git简介github简介git的安装github的配置1&#xff0c;注册github帐号2&#xff0c;登录github3&#xff0c;配置git4&#xff0c;生成密钥5&#xff0c;在github中添加密钥6&#xff0c;使用git从github.com中clone一个项目的源代码git简介 Git是一个开源的版本控制管…

Java知识复习(六)常见的设计模式(单例、原型、工厂)

前言 发现无论是什么设计模式&#xff0c;其实总的原则就是减少耦合&#xff0c;增加可复用代码&#xff0c;使系统更易于扩展 参考书籍&#xff1a;《秒懂设计模式》 1、单例模式&#xff08;Singleton&#xff09; 单例模式&#xff1a;即单一的实例&#xff0c;同时提供几…

【java web篇】项目管理构建工具Maven简介以及安装配置

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【离线数仓-8-数据仓库开发DWD层-交易域相关事实表】

离线数仓-8-数据仓库开发DWD层-交易域相关事实表离线数仓-8-数据仓库开发DWD层-交易域相关事实表一、DWD层设计要点二、交易域相关事实表1.交易域加购事务事实表1.加购事务事实表 前期梳理2.加购事务事实表 DDL表设计分析3.加购事务事实表 加载数据分析1.首日全量加购的数据加载…

基于APRX并行架构的高速QPSK解调实现(Matlab仿真篇)

由于QPSK系统下变频之后的信号中频为720MHz,信息符号速率为500Mbps,因此,采用传统的串行解调方案已无法在FPGA中实现解调。因此,本方案采用基于APRX并行架构实现对高速率的QPSK解调。如图1所示,为并行全数字QPSK接收机实现架构。 图1 并行全数字QPSK接收机实现架构 1 高速…

Golang 接口笔记

基本介绍接口是一个数据类型&#xff0c;可以定义一组方法&#xff0c;但都不需要实现。并且interface中不能包含任何变量。到某个自定义类型要使用的时候&#xff0c;再根据具体情况把这些方法实现出来语法type 接口名 interface {method1(参数列表) 返回值列表method2(参数列…

UG NX二次开发(C#)-CAM-点击插件自动进入CAM模块

文章目录 1、前言2、调用CAM模块错误2、进入加工模块1、前言 UG NX软件中CAM模块作为一个很重要的,也是其特别亮点的功能模块,能实现车、铣、磨、钻等加工工艺编程,但是由于其是通用性比较强,对于专业上的可能不能完全满足要求,这就要求我们在CAM模块下进行二次开发。我们…