SpringBoot自动配置的原理是什么

简介: SpringBoot自动配置核心是@EnableAutoConfiguration注解,通过@Import导入配置选择器,读取classpath下META-INF/spring.factories中配置的全类名,结合@Conditional条件注解决定是否加载Bean。自3.0版本起,该文件被替换为XXxxxSpringAutoConfiguration.imports。

其实SpringBoot自动配置的核心,是引导类上加的注解@SpringBootApplication 底层封装的一个注解,叫@EnableAutoConfiguration,这个注解才是实现自动化配置的核心注解。

该注解通过@lmport注解导入对应的配置选择器,导入了一个|mportSelector接口的实现类。而在这个类的内部呢,读取了该项目和该项目引用的Jar包中的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。

在这些配置类中所定义的Bean,会根据条件注解@Condition系列注解所指定的条件来决定是否需要将其导入到Spring容器中。

般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

但是这里要说明一点哈,就是刚才提到的系统配置类声明的配置文件 META-INF/spring.factories,在springboot3.0版本之后,就已经废除了,不会在这个文件中配置自动配置类了,替换成了一份新的配置文件,配置文件名比较长,记不住,后缀名为:XXxxxSpringAutoConfiguration.imports。

相关文章
|
1天前
|
Java Maven Spring
SpringBoot中如何自定义starter
自定义Spring Boot Starter通常包含两个模块:starter负责依赖管理,autoconfigure实现自动配置。前者引入后者。在autoconfigure中,通过@Configuration和@Bean定义配置类与Bean,并结合@Conditional条件注解控制Bean的创建;最后在META-INF/spring.factories(或Spring Boot 3的xxx.imports文件)中注册自动配置类全名,完成自动化配置。
|
1天前
|
存储 弹性计算 人工智能
大模型应用开发
大模型应用开发需通过API与模型交互,企业可选择开放API、云平台或本地服务器部署。开放API使用便捷但存在安全与成本问题;云部署易维护但仍有隐私风险;本地部署安全性高、长期成本低,适合企业级应用,不建议个人电脑部署。
|
1天前
|
存储 SQL 关系型数据库
什么是回表查询
MySQL中InnoDB引擎的聚簇索引将数据与索引存储在一起,叶子节点存整行数据,每表仅一个;二级索引则分离存储,叶子节点存主键值。回表查询需先查二级索引再查聚簇索引,性能较低。优化方式包括:优先主键查询、使用联合索引实现覆盖索引、利用MySQL 5.6+的索引下推功能,在存储引擎层提前过滤,减少回表次数,提升查询效率。(238字)
|
1天前
|
索引
HashMap 原理(方法执行流程)
以put方法为例,介绍HashMap的工作原理:先通过key的hashCode计算哈希值,并进行二次哈希提升分布均匀性;若数组未初始化则创建默认容量为16的数组;利用(n-1)&hash计算桶下标,确保高效定位;根据桶位状态分别处理:空位直接插入、链表遍历更新或尾插并判断树化、红黑树则按树逻辑新增;最后检查是否需扩容。
|
1天前
|
索引
HashMap 原理(数据结构)
HashMap底层由数组、链表和红黑树构成。数组通过hashCode定位元素,实现O(1)存取;但容量有限,易发生冲突。冲突时用链表串联,但链表过长会降性能。因此当链表长度≥8且数组容量≥64时,转为红黑树,将查找复杂度从O(n)降为O(log n),提升效率;节点减少时则退回链表。
|
1天前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree
MySQL采用B+树作为索引结构,因其非叶子节点仅存键和指针,使每页可存储更多键,树层级更浅,查询更快。所有数据集中于叶子节点,查询效率稳定,且叶子节点形成双向链表,支持高效范围查询。
|
1天前
|
搜索推荐
冒泡排序与其它排序算法比较
冒泡、选择、插入排序时间复杂度均为O(n²)。冒泡稳定,可优化至O(n),交换频繁;选择不稳定,交换次数少;插入稳定,对有序数组高效,三者中交换最少。相较其他高级排序无时间优势。
|
1天前
|
Java Spring
Spring Boot配置的优先级
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、yml、yaml)和外部配置(系统属性、命令行参数)。优先级从高到低为:命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml。
|
1天前
|
SQL 监控 关系型数据库
如何定位出项目中的慢SQL
在项目开发中,定位慢SQL是常见问题。可通过链路追踪工具(如SkyWalking)分析调用链耗时,精准定位慢接口及慢SQL;若无监控工具,可开启MySQL慢查询日志,配置阈值记录执行时间较长的SQL,进而优化性能。
|
1天前
|
SQL 索引
索引失效的场景
本文结合项目经验,总结了索引失效的常见场景:违反最左前缀法则、范围查询右侧列失效、索引列进行函数运算、隐式类型转换、未加引号的字符串匹配及%开头的like查询。同时建议使用explain分析执行计划,关注key、type和extra字段,优化SQL性能。