news 2026/5/15 10:04:31

Spring Boot自动配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot自动配置

Spring Boot自动配置

一、核心思想与目标

自动配置是Spring Boot的基石,其核心目标是:根据项目中引入的依赖(JAR包)和预设的配置,自动、智能地组装和配置Spring应用所需的Bean,实现“约定大于配置”,让开发者专注于业务逻辑,而非繁琐的框架配置。

二、自动配置的三大核心注解

自动配置的旅程始于主类上的@SpringBootApplication。它是一个复合注解,主要由以下三个关键注解组成:

注解核心职责简要说明
@SpringBootConfiguration标识配置类本质上是@Configuration的变体,表明该类是一个Spring配置类。
@ComponentScan组件扫描默认扫描主类所在包及其子包下的@Component,@Service,@Repository,@Controller等注解的类。
@EnableAutoConfiguration启用自动配置(核心)这是自动配置的“总开关”。它通过@Import导入了一个关键的选择器类。
三、自动配置的工作原理(核心流程)

整个自动配置流程围绕@EnableAutoConfiguration展开,其核心是一个“发现-加载-条件装配”的过程。

第1步:触发与导入

  • 当应用启动时,@EnableAutoConfiguration注解会通过@Import注解,导入一个核心选择器类:AutoConfigurationImportSelector

第2步:加载候选配置类(发现阶段)

  • AutoConfigurationImportSelector会调用SpringFactoriesLoader.loadFactoryNames()方法。

  • 这个方法会扫描所有依赖JAR包META-INF/spring.factories这个配置文件

  • 它查找配置文件中EnableAutoConfiguration这个Key对应的所有值。这些值就是全限定类名,即一个个自动配置类(例如:org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration)。

  • spring.factories文件示例:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.MyAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration

第3步:过滤与条件装配(核心中的核心)

  • 此时,Spring Boot获得了所有可能的自动配置类清单。但并非所有类都会生效。

  • 每个自动配置类上都标有大量的@Conditional及其衍生注解(如@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnProperty)。

  • Spring Boot会逐一检查这些条件注解是否满足:

    • @ConditionalOnClass:类路径下存在指定的类时才生效。(例如,当存在DataSource.class时,数据源相关的自动配置才生效)。

    • @ConditionalOnMissingBean:当Spring容器中不存在指定类型的Bean时才生效。(这为用户自定义Bean覆盖默认配置提供了可能)。

    • @ConditionalOnProperty:当指定的配置属性满足条件时才生效。

  • 只有全部条件都满足的自动配置类,才会被真正加载到Spring容器中。

第4步:注册Bean

  • 最终生效的自动配置类本身就是一个标准的@Configuration类。

  • 在这些类中,通过@Bean注解定义了一系列的Bean(如DataSource,DispatcherServlet,EntityManagerFactory等)。

  • 这些Bean被注册到Spring IOC容器中,从而完成了整个应用上下文的自动组装。

四、一个生动的例子:MyBatis-Spring-Boot-Starter
  1. 引入依赖:你在pom.xml中添加mybatis-spring-boot-starter

  2. 提供配置类:该Starter的JAR包中包含META-INF/spring.factories文件,其中声明了自己的自动配置类,例如MybatisAutoConfiguration

  3. 条件判断MybatisAutoConfiguration类上可能标有@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })。因为引入了Starter,这些类都在类路径下,条件满足

  4. 创建Bean:该配置类内部会使用@Bean注解,自动创建并配置SqlSessionFactorySqlSessionTemplate等MyBatis核心组件所需的Bean。

  5. 用户自定义:如果你想覆盖默认配置,只需在自己的@Configuration类中,手动定义一个SqlSessionFactoryBean。由于@ConditionalOnMissingBean的条件,Spring Boot将优先使用你定义的Bean,而不会使用自动配置提供的默认Bean。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:43:09

微信小程序体育球馆场地租赁商城系统

文章目录 具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 具体实现截图 本系统(程序源码数据库调试部署讲解)带文档1…

作者头像 李华
网站建设 2026/5/15 10:03:16

挑战篇-02-认识一个AI模型聚合平台

AI 模型聚合平台 主打让普通用户方便用用各种大模型。 聊天,写东西,问知识切换模型就能体验不同的AI能力。 不用挨个网站去注册。 头部的AI模型聚合平台, 就比如 POE 官网如下 https://poe.com/ 用户量多, 模型也全, 像…

作者头像 李华
网站建设 2026/5/13 11:29:16

Dockerfile

目录 前言: 一,Dockerfile 核心理论 1.1、Docker 镜像的分层架构:Dockerfile 的设计基石 1.2、Dockerfile 的构建上下文:指令的作用范围 1.3、Dockerfile 指令的深层执行逻辑 1.3.1. 基础镜像指令:FROM 与 ARG 的…

作者头像 李华
网站建设 2026/5/10 5:51:11

18.0环实现线程和进程的监控(ObRegisterCallbacks函数)-Windows驱动

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:17.过保护读内存(通过内核(驱动)apc的方式附…

作者头像 李华
网站建设 2026/5/14 0:12:11

内容负责人必读:构建企业GEO优化体系的几大关键

在AI驱动的信息检索时代,GEO优化(Generative Engine Optimization) 已经成为品牌和内容负责人必须掌握的核心策略。与传统搜索引擎优化(SEO)侧重于提升网站在搜索结果页面中的排名不同,GEO优化专注于让内容…

作者头像 李华