Springboot的自动配置原理
文章目录
- Springboot的自动配置原理?
- 1. Spring Boot Starter 依赖
- 2.@SpringBootApplication注解
- 3.自动触发配置
- 4.Auto-configuration Classes
- 5.条件注解
- 6. 外部配置文件
- 7. 优先级和排除
- 总结
Springboot的自动配置原理?
1. Spring Boot Starter 依赖
Spring Boot 提供了各种 starter 依赖,例如 spring-boot-starter-web、spring-boot-starter-data-jpa 等。引入这些 starter 依赖,会自动包含一系列相关的库和配置,从而简化了项目的依赖管理。
2.@SpringBootApplication注解
@SpringBootApplication
注解是一个组合注解,包括三个注解:
- @SpringBootConfiguration:标识该类是一个Spring配置类。
- @EnableAutoConfiguration:
启用Spring Boot的自动配置机制
。 - @ComponentScan:启用组件扫描,自动发现并注册Spring组件。
@SpringBootApplication
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}
3.自动触发配置
@EnableAutoConfiguration 注解会触发自动配置机制
。Spring Boot 在启动时会根据类路径中的依赖和各种条件自动配置 Spring 应用。
@EnableAutoConfiguration 注解的定义:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {Class<?>[] exclude() default {};String[] excludeName() default {};
}
这个注解包含以下几个重要部分:
- @AutoConfigurationPackage:
自动配置包,标注此注解的类所在包及其子包会被扫描,自动注册为 Spring 的 Bean。
该注解的作用类似于 @ComponentScan。 @Import
(AutoConfigurationImportSelector.class):
导入 AutoConfigurationImportSelector(自动配置选择器),这个类负责加载并注册所有符合条件的自动配置类
。
4.Auto-configuration Classes
Spring Boot 通过扫描 META-INF/spring.factories
文件,查找 org.springframework.boot.autoconfigure.EnableAutoConfiguration 属性列出的所有自动配置类。这些自动配置类包含了一系列用 @Configuration 注解标注的类,这些类定义了应用所需的各种 bean。
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
...
5.条件注解
自动配置类通常使用条件注解
(如 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 等)来决定是否加载特定的配置。这些注解确保了只有在满足特定条件时才会创建相关的 bean。
@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic DataSource dataSource(DataSourceProperties properties) {return new HikariDataSource(properties);}
}
eg:@ConditionalOnClass: 只有在特定的类存在时才会加载配置。
@ConditionalOnMissingBean: 只有在容器中没有特定的bean时才会加载配置。
@ConditionalOnProperty: 只有在配置文件中存在特定属性时才会加载配置。
6. 外部配置文件
外部配置文件
:Spring Boot 支持多种外部配置方式,如 application.properties 或 application.yml。这些配置文件可以覆盖默认的自动配置。例如,可以在 application.properties 文件中配置数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
7. 优先级和排除
优先级和排除
:
- 优先级:Spring Boot 自动配置的 bean 定义在默认配置中具有较低优先级,允许用户自定义配置覆盖自动配置。
- 排除自动配置:可以使用 @SpringBootApplication 注解的 exclude 属性或 @EnableAutoConfiguration 注解的 exclude 属性排除不需要的自动配置类。
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}
总结
Spring Boot的自动配置原理
是通过@EnableAutoConfiguration注解引入自动配置逻辑,然后解析@Import注解,加载各种配置类,包括deferredlmportSelector和自动配置类。通过SPI机制读取spring.factories文件。过滤出自动配置类,并根据条件化配置来动态加载这些类,从而实现自动配置故功能。这种机制使得Spring Boot应用程序可以根据环境和需求自动配置,极大地简化了开发和部署的工作。
DeferredImportSelector 是 Spring Framework 中的一个接口,继承自ImportSelector,DeferredImportSelector 提供了一种机制,可以在所有配置类加载完成后,再根据某些条件动态决定需要导入哪些配置类。
相关文章:
Springboot的自动配置原理
文章目录 Springboot的自动配置原理?1. Spring Boot Starter 依赖2.SpringBootApplication注解3.自动触发配置4.Auto-configuration Classes5.条件注解6. 外部配置文件7. 优先级和排除总结 Springboot的自动配置原理? 1. Spring Boot Starter 依赖 Spring Boot 提供了各种 …...
Interview preparation--elascitSearch深分页问题
深度分页出现原因 当我们需要查询的数据页数特别大的时候,比如from size 大于10000 的时候,可能出现“window is too large” 异常,如下网图: 查询语句如下 { "query": { "bool": { "must": [ {…...
C语言笔试题:实现把一个无符号整型数字的二进制序列反序后输出
目录 题目 实例 方法一:直接交换 方法二:间接交换 拓展 题目 编写一个函数,将一个无符号整数的所有位逆序(在32位机器下) 实例 例如有一个无符号整数 unsigned int num 32; unsigned int 在32位系统中占4个字…...
elementplus如何实现dialog遮罩层外的元素可以被操作点击
elementplus如何实现dialog遮罩层外的元素可以被操作点击 element plus 组件库中的 dialog 组件可以说是使用频率最高的组件之一,它的效果是弹出一个对话框,外面默认会有一个蒙层。 现在我碰到的需求是,弹窗要正常显示,但是蒙层下…...
Springboot整合Kafka消息队列服务实例
一、Kafka相关概念 1、关于Kafka的描述 Kafka是由Apache开源,具有分布式、分区的、多副本的、多订阅者,基于Zookeeper协调的分布式处理平台,由Scala和Java语言编写。通常用来搜集用户在应用服务中产生的动作日志数据,并高速的处…...
kotlin——MVVM框架下的大型项目优化
目录 概要 优化思路 一、重构过长的Activity 二、优化臃肿的ViewModel 示例代码: 概要 在大型项目中,随着项目越做越大,activity和viewmodel的代码会越来越多,尽量保持Activity和ViewModel的代码精简和易于维护是非常重要的。个人…...
echarts实现折线图点击添加标记
文章目录 背景一、代码示例 背景 业务场景体现在功能层面主要两点, 折线图表设置点击事件点击事件与图标渲染标记绑定 对于节点没有被添加标记的可以,弹框提示添加标记,并提供标记内容输入框,已经添加过标记的点,点…...
循环赛日程表
描述 n 2 ^ k个选手 每个选手必须与其他n-1个选手各赛一次每个选手一天赛一次比赛打n-1天 思路 k 3时的解 我们先进行假设:每个选手第一天和自己比,然后分解成4个子问题: (1)14号的第14天,对手1~4号; (2)14号的第58天&a…...
计算机网络:运输层 - 概述
计算机网络:运输层 - 概述 运输层的任务端口号复用与分用UDP协议首部格式 TCP协议面向字节流 运输层的任务 物理层、数据链路层以及网络层,他们共同解决了将主机通过网络互联起来所面临的问题,实现了主机到主机的通信。 网络层的作用范围是…...
使用阿里开源的Spring Cloud Alibaba AI开发第一个大模型应用
背景 前段时间看到Spring推出了SpringAI,可以方便快速的接入ChatGPT等国外的大模型,现在阿里巴巴也紧追脚步推出了Spring Cloud Alibaba AI,Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通义系列大模型的接入。通义接入…...
`THREE.PointsMaterial` 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。
demo案例 THREE.PointsMaterial 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。下面是对其构造函数的参数、属性和方法的详细讲解。 构造函数 const material new THREE.PointsMaterial(parameters);参数&am…...
Android-Android Studio-FAQ
1 需求 2 接口 3 Android Studio xml布局代码补全功能失效问题 最终解决方案就是尝试修改compileSdk 为不同SDK版本来解决问题,将原本34修改为32测试会发现xml代码补全功能有效了! 参考资料 Android Studio xml布局代码补全功能失效问题_android studi…...
架构师指南:现代 Datalake 参考架构
这篇文章的缩写版本于 2024 年 3 月 26 日出现在 The New Stack 上。 旨在最大化其数据资产的企业正在采用可扩展、灵活和统一的数据存储和分析方法。这一趋势是由企业架构师推动的,他们的任务是制定符合不断变化的业务需求的基础设施。现代数据湖体系结构通过将数…...
通讯协议大全(UART,RS485,SPI,IIC)
参考自: 常见的通讯协议总结(USART、IIC、SPI、485、CAN)-CSDN博客 UART那么好用,为什么单片机还需要I2C和SPI?_哔哩哔哩_bilibili 5分钟看懂!串口RS232 RS485最本质的区别!_哔哩哔哩_bilibili 喜欢几位…...
基于EXCEL数据表格创建省份专题地图
1 数据源 随着西藏于5月1日发布2022年一季度经济运行情况,31省份一季度GDP数据已全部出炉。 总量方面,粤苏鲁稳居前三;增速方面,23省份高于“全国线”,新疆表现最佳,增速达到7.0%。 表格表现数据不够直观…...
基于java+springboot+vue实现的电商应用系统(文末源码+Lw)241
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本电商应用系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…...
好文!12个策略解决 Kafka 数据丢失问题
哥们儿!有遇到Kafka数据丢失问题的问题吗,你是如何解决的?今天的文章,V哥来详细解释一下,整理了12种解决策略,希望可以帮助你解决项目中的问题:以下是一些常见的解决方案和最佳实践。 生产者确认…...
Android 第三方框架:网络:OkHttp:源码分析:拦截器
文章目录 涉及到的设计模式 责任链模式:ArrayList策略模式:Interceptor和XXXInterceptor源码分析API总结涉及到的设计模式 责任链模式:ArrayList ArrayList 用ArrayList作为保存顺序的数据结构 把系统提供的各种Interceptor和自定义的Interceptor放入ArrayList中 RealI…...
FlowUs AI的使用教程和使用体验
FlowUs AI 使用教程 FlowUs AI特点使其成为提升个人和团队生产力的有力工具,无论是在学术研究、内容创作、技术开发还是日常办公中都能发挥重要作用。现在来看看如何使用FlowUs AI吧! 注册与登录:首先,确保您已经注册并登录FlowU…...
SwiftUI 6.0(iOS 18)ScrollView 全新的滚动位置(ScrollPosition)揭秘
概览 在只有方寸之间大小的手持设备上要想体面的向用户展示海量信息,滚动视图(ScrollView)无疑是绝佳的“东牀之选”。 在 SwiftUI 历史的长河中,总觉得苹果对于 ScrollView 视图功能的升级是在“挤牙膏”。这不,在本…...
阿贝云免费虚拟主机和免费云服务器评测
阿贝云是一家提供免费虚拟主机和免费云服务器的服务商,为用户提供了一个便捷的搭建网站和应用的平台。他们的服务受到了很多用户的好评。用户可以轻松地在阿贝云上创建自己的网站,并享受免费的虚拟主机和云服务器。通过阿贝云的服务,用户可以…...
不懂就问,开通小程序地理位置接口有那么难吗?
小程序地理位置接口有什么功能? 若提审后被驳回,理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通,建议完成接口开通后或移除接口相关内容后再进行后续版本提审”,那么遇到这种情况&#x…...
Python 全栈系列256 异步任务与队列消息控制(填坑)
说明 每个创新都会伴随着一系列的改变。 在使用celery进行异步任务后,产生的一个问题恰好也是因为异步产生的。 内容 1 问题描述 我有一个队列 stream1, 对应的worker1需要周期性的获取数据,对输入的数据进行模式识别后分流。worker1我设施为10秒运行…...
从零开始的Ollama指南:部署私域大模型
大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…...
C++类和对象总结
目录 总结 一、引言 二、类的定义 三、对象的创建与初始化 四、访问控制 五、封装 六、继承 七、多态 八、其他特性 九、总结 C类的定义 C对象的创建和初始化 C类的访问控制 总结 一、引言 C是一种面向对象的编程语言,其核心概念是类和对象。类是对现…...
基于PHP的民宿管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的民宿管理系统 一 介绍 此民宿管理系统基于原生PHP开发,数据库mysql,前端jquery.js和echarts.js。系统角色分为用户和管理员。用户可以在线浏览和预订民宿,管理员登录后台进行相关管理等。(在系统…...
ROS中C++、Python完整的目录结构
文章目录 在ROS中,一个典型的C软件包目录结构通常包括以下几个主要目录: include:该目录包含C头文件(.hpp或者.h文件),用于声明类、函数、变量等。通常,这些头文件定义了ROS节点、消息类型、服务…...
Boosting原理代码实现
1.提升方法是将弱学习算法提升为强学习算法的统计学习方法。在分类学习中,提升方法通过反复修改训练数据的权值分布,构建一系列基本分类器(弱分类器),并将这些基本分类器线性组合,构成一个强分类…...
【Qt基础教程】事件
文章目录 前言事件简介事件示例总结 前言 在开发复杂的图形用户界面(GUI)应用程序时,理解和掌握事件处理是至关重要的。Qt,作为一个强大的跨平台应用程序开发框架,提供了一套完整的事件处理系统。本教程旨在介绍Qt事件处理的基础知识&#x…...
外星人Alienware m15R7 原厂Windows11系统
装后恢复到您开箱的体验界面,包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http://w…...
网站建设计划书/360开户
linux mixerWindows 10’s Creators Update added a new live game-streaming feature. You can broadcast your gameplay in real time to your friends without any additional software. Windows 10的创作者更新添加了新的实时游戏流媒体功能。 您可以将您的游戏玩法实时广播…...
医程通 网站做的太/网站及推广
洛谷 P2505 旅行 题解 洛谷 P2502 解题思路 将速度从小到大排 枚举断点 连接两个点 假如起点可到达终点 更新答案 输出记得化简 代码 #include<algorithm> #include<iostream> #include<cstdio> using namespace std; int xx,yy,ta,wo,n,m,s,t; double …...
班级网页模板html源码/seo的搜索排名影响因素有哪些
Android系统的壁纸是其核心模块之一,但是一直以来壁纸Android的壁纸又有其一直的BUG。例如使用单屏的图片作为壁纸,在手机重启后,会自动拉伸图片变为随桌面一起滑动的桌面。还有就是在这种情况下使用桌面,壁纸后面会有恼人的黑色&…...
网站换ip影响 百度/搜外网 seo教程
windbg附加IE后,设置flash模块加载断点 sxe ld Flash32_30_0_0_113.ocx内存访问断点,Flash漏洞利用代码,通过任意地址读写,泄露一个Flash Object 虚表函数地址, 通过计算虚表函数地址,可以定位到Flash模块…...
网站开发的流程是怎样的/b站大全永不收费2023入口在哪
安全加密C语言库OpenSSL,在Android中服务器和客户端之间的签名验证和数据加密通信等。OpenSSL系列文章:最近有这么一个需求,要对接口进行签名验证以防止被刷。开始想到了在Java中实现HmacSHA1签名,但由于Java代码较容易反编译直接…...
网站建设需求调查问卷/小程序推广
华为荣耀9是什么系统?华为荣耀9系统更新?作为主打年轻多彩的荣耀品牌,这次的华为荣耀9怎么样呢?接下来详细介绍:华为荣耀9是什么系统?华为荣耀9系统更新?华为荣耀9Android 7.0,EMUI 5.1。1、系统:荣耀9基于安卓7.0系统,搭载的…...