SpringBoot -- 自动配置机制

news/2024/4/29 6:19:10/文章来源:https://blog.csdn.net/Kaiser__/article/details/137108738

使用SpringBoot框架可以让我们快速的构建一个web项目并能成功运行,而之前的SSM则需要我们大量的配置。那么,SpringBoot为什么可以如此神奇,这是怎么做到的呢?那就要介绍一下SpringBoot的自动配置机制。那么,SpringBoot的自动配置机制又是怎么完成相关工作的?

使用SpringBoot快速构建web项目,有几个核心部分,下面就对其进行主要介绍。

1. 场景启动器(starter)

在我们通过SpringBoot构建项目时,必须要在依赖中导入相关的场景启动器,例如web场景对应的spring-boot-starter-web。那么,场景启动器是什么呢?包含哪些内容?

  • 场景启动器会导入相关场景的所有依赖:例如web场景中会导入starter-jsonstarter-tomcatspringmvc

  • 每个场景启动器都会引入spring-boot-starter,也就是核心场景启动器。要注意的是,无论导入的是什么场景,对应的场景启动器都会导入spring-boot-starter。换句话说,它在所有项目中都存在,因此它其中会包含通用的东西。

  • 核心场景启动器引入了spring-boot-autoconfigurespring-boot-autoconfigure里面囊括了所有场景的所有配置类。也就是说,如果这个包下的所有配置类都能生效,那么SpringBoot帮我们整合好的功能就都可以直接使用。

  • 但SpringBoot默认扫描不到 spring-boot-autoconfigure下写好的所有配置类。因为SpringBoot默认只扫描主程序所在的包。

2. 主程序

使用SpringBoot构建项目后,会有一个主程序,也就是程序运行的入口,相当于main函数。其上会有注解@SpringBootApplication标注,那么这个标注又在完成什么事情呢?

  • @SpringBootApplication由三个注解组成@SpringBootConfiguration@EnableAutoConfiguratio@ComponentScan
    • @SpringBootConfiguration注解与@Configuration注解功能相同,声明这是个配置类。
    • @ComponentScan我们也很熟悉,可以指定组件扫描的路径。因此,我们也可以直接通过@SpringBootApplication指定扫描路径。
    • SpringBoot默认只能扫描自己主程序所在的包及其下面的子包。
  • @EnableAutoConfiguration是SpringBoot 开启自动配置的核心:
    • 其源码中包含@Import(AutoConfigurationImportSelector.class),可以批量给容器中导入组件。
    • 因此,SpringBoot项目启动的时候利用 @Import 批量导入组件机制把spring-boot-autoconfigure包下的xxxxAutoConfiguration类导入进来(自动配置类)。
    • 虽然导入了包下所有的配置类,但并不是每一个配置类都能生效。每一个配置类都标注了条件注解@ConditionalOnxxx,只有条件成立,才能生效 。

3. xxxxAutoConfiguration自动配置类

根据前文所述,所有的SpringBoot项目都包含spring-boot-starter,而spring-boot-starter引入了spring-boot-autoconfigurespring-boot-autoconfigure又包含了很多官方已经整合好的配置类,也就是 xxxxAutoConfiguration。那么,配置类是怎么配置的呢?

  • 配置类会使用@Bean 给容器中放相关组件。

  • 许多自动配置类都有注解@EnableConfigurationProperties(ServerProperties.class),用来把配置文件中指定前缀的属性值封装到 xxxProperties属性类中。例如,@EnableConfigurationProperties(ServerProperties.class)会把配置文件中server下所有的配置值都映射到ServerProperties这个类中的属性值。

  • 给容器中放的所有组件的一些核心参数,都来自于xxxProperties。xxxProperties都是通过注解和配置文件绑定的。

  • 因此,我们只需要改配置文件的值,核心组件的底层参数都能修改。

4. 总结

  • 我们导入场景启动器,最终就会引入spring-boot-autoconfigure

  • spring-boot-autoconfigure有一个文件,META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面包含着许多自动配置类,也就是xxxxAutoConfiguration

  • 通过主程序注解中的@EnableAutoConfiguration,把所有的xxxxAutoConfiguration都导入进来

  • 每个xxxxAutoConfiguration会根据自己的条件注解@ConditionalOnxxx进行按需加载,用不到的就不会进行加载

  • xxxxAutoConfiguration会通过注解@EnableConfigurationProperties()xxxProperties与配置文件进行绑定,获取自定义的的配置

  • xxxAutoConfiguration给容器中导入相关组件,组件都是从 xxxProperties中提取属性值

这样,通过SpringBoot的自动配置机制,我们只需要导入starter、修改配置文件,就能修改底层行为,根据我们的需求进行自定义配置。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基于微信小程序的校园订餐小程序的实现,附源码和数据库

博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月29日,星期五

每天一分钟,知晓天下事! 2024年3月29日 星期五 农历二月二十 1、 网络表演(直播与短视频)运营团体标准发布:应建立举报处置机制。 2、 商务部:中国决定终止对澳大利亚进口葡萄酒征收反倾销税和反补贴税。…

八大技术趋势案例(虚拟现实增强现实)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

android中控件和基本事件的响应

1.概述 在Android中,在处理UI中的各种元素的时候,两个程序中的要点为: 得到布局文件(XML)中的控件句柄 设置控件的行为 本篇文章将介绍在 Android 中几种基本的程序控制方法,要获得的效果是通过 2 个按钮来…

吴恩达机器学习:实践实验室-应用机器学习的建议(Advice for Applying )

在这个实验室中,您将探索评估和改进机器学习模型的技术。 文章目录 1 - Packages2-评估学习算法(多项式回归)2.1拆分数据集2.1.1图列、测试集 2.2模型评估的误差计算,线性回归2.3比较训练和测试数据的表现 3-偏差和方差3.1绘图列…

鸿蒙OpenHarmony技术:【设备互信认证】

简介 在OpenHarmony中,设备互信认证模块作为安全子系统的子模块,负责设备间可信关系的建立、维护、使用、撤销等全生命周期的管理,实现可信设备间的互信认证和安全会话密钥协商,是搭载OpenHarmony的设备进行可信互联的基础平台能…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

一篇文章,告别Flutter状态管理争论,问题和解决

起因 每隔一段时间&#xff0c;都会出现一个新的状态管理框架&#xff0c;最近在YouTube上也发现了有人在推signals, 一个起源于React的状态管理框架&#xff0c;人们总是乐此不疲的发明各种好用或者为了解决特定问题而产生的方案&#xff0c;比如Bloc, 工具会推陈出新&#x…

春秋云境CVE-2023-0562

简介 银行储物柜管理系统是一个基于网络的应用程序&#xff0c;用于处理存储银行客户贵重物品的银行储物柜。储物柜的所有详细信息都保存在数据库中。银行储物柜管理系统项目是使用 PHP 和 MySQLi 扩展开发的。 正文 进入靶场&#xff0c;首先就看到有个bankers&#xff0c;…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

【Redis】redis哨兵模式

概述 Redis Sentinel&#xff0c;即Redis哨兵&#xff0c;在Redis 2.8版本开始引入。它是Redis高可用的实现方案之一。Sentinel是一个管理多个Redis实例的工具&#xff0c;它的核心功能是可以实现对Redis的监控、通知、自动故障转移。 监控&#xff08;Monitoring&#xff09…

OSX-02-Mac OS应用开发系列课程大纲和章节内容设计

本节笔者会详细介绍下本系统专题的大纲&#xff0c;以及每个专题章节的组织结构。这样读者会有一个全局的概念。 在开始前还是在再介绍一下下面这个框架图&#xff0c;因为比较重要&#xff0c;在这里再冗余介绍一下。开发Apple公司相关产品的软件时&#xff0c;主要有两个框架…

Untiy 布局控制器Aspect Ratio Fitter

Aspect Ratio Fitter是Unity中的一种布局控制器组件&#xff0c;用于根据指定的宽高比来调整包含它的UI元素的大小。实际开发中&#xff0c;它可以确保UI元素保持特定的宽高比&#xff0c;无论UI元素的内容或父容器的大小如何变化。 如图为Aspect Ratio Fitter组件的基本属性&…

深度学习 - PyTorch基本流程 (代码)

直接上代码 import torch import matplotlib.pyplot as plt from torch import nn# 创建data print("**** Create Data ****") weight 0.3 bias 0.9 X torch.arange(0,1,0.01).unsqueeze(dim 1) y weight * X bias print(f"Number of X samples: {len(…

Day24:私信列表、私信详情、发送私信

测试用户&#xff1a;用户名aaa 密码aaa 查询当前用户的会话列表&#xff1b;每个会话只显示一条最新的私信&#xff1b;支持分页显示。 首先看下表结构&#xff1a; conversation_id: 用from_id和to_id拼接&#xff0c;小的放前面去&#xff08;因为两个人的对话应该在一个会…

物联网实战--入门篇之(一)物联网概述

目录 一、前言 二、知识梳理 三、项目体验 四、项目分解 一、前言 近几年很多学校开设了物联网专业&#xff0c;但是确却地讲&#xff0c;物联网属于一个领域&#xff0c;包含了很多的专业或者说技能树&#xff0c;例如计算机、电子设计、传感器、单片机、网…

誉天华为认证云计算课程如何

HCIA-Cloud Computing 5.0 课程介绍&#xff1a;掌握华为企业级虚拟化、桌面云部署&#xff0c;具备企业一线部署实施及运维能力 掌握虚拟化技术、网络基础、存储基础等内容&#xff0c;拥有项目实施综合能力 满足企业虚拟化方案转型需求&#xff0c;应对企业日益多样的业务诉求…

快速上手Spring Cloud 十四:璀璨物联网之路

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

JAVA面试八股文之集合

JAVA集合相关 集合&#xff1f;说一说Java提供的常见集合&#xff1f;hashmap的key可以为null嘛&#xff1f;hashMap线程是否安全, 如果不安全, 如何解决&#xff1f;HashSet和TreeSet&#xff1f;ArrayList底层是如何实现的&#xff1f;ArrayList listnew ArrayList(10)中的li…

【计算机网络】第 11、12 问:流量控制和可靠传输机制有哪些?

目录 正文流量控制的基本方法停止-等待流量控制基本原理滑动窗口流量控制基本原理 可靠传输机制1. 停止-等待协议2. 后退 N 帧协议&#xff08;GBN&#xff09;3. 选择重传协议&#xff08;SR&#xff09; 正文 流量控制涉及对链路上的帧的发送速率的控制&#xff0c;以使接收…