Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

    • Spring 事务
    • Spring Boot自动装配基于SPI实现的吗
    • SpringBoot自动装配是什么
    • MyBatis插入数据后回填id
    • springboot2.5.15整合prometheus
    • 集成loki
  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • Spring
plantre
2025-05-08

SpringBoot自动装配是什么

Spring Boot自动装配详解(含具体数据说明)


一、核心定义 Spring Boot自动装配是一种基于依赖和条件判断的智能配置机制,能够根据项目依赖(如引入的Starter)、类路径中的库以及配置文件,自动向Spring容器注册所需Bean,减少90%以上的手动配置代码量。


二、核心机制与数据支撑

  1. 触发入口:@SpringBootApplication组合注解
    • 包含@EnableAutoConfiguration(启动自动装配)

    • 关键数据:

    ◦ 在spring-boot-autoconfigure模块中,预置了超过200个自动配置类(如DataSourceAutoConfiguration、WebMvcAutoConfiguration)

    ◦ 每个配置类通过META-INF/spring.factories文件注册,例如Spring Boot 3.0版本中,该文件定义了127个默认自动配置类路径。

  2. 条件化装配(核心特性)
    • 条件注解示例:

    ◦ @ConditionalOnClass(DataSource.class):类路径存在DataSource时生效(如引入spring-boot-starter-jdbc依赖)

    ◦ @ConditionalOnMissingBean(MyService.class):容器中无MyService实例时生效

    • 数据案例:

    ◦ 引入spring-boot-starter-web依赖后,Spring Boot自动配置Tomcat服务器(默认端口8080)和DispatcherServlet(默认路径/),无需手动配置。

  3. 依赖驱动的配置
    • Starter依赖与自动配置关系:

    Starter依赖 自动配置的Bean 触发条件
    spring-boot-starter-data-jpa DataSource, EntityManagerFactory 检测到javax.sql.DataSource类存在
    spring-boot-starter-redis RedisTemplate, RedisConnectionFactory 类路径中存在RedisClient类
    spring-boot-starter-security SecurityFilterChain, UserDetailsService 存在SecurityConfigurer类

三、具体数据示例

  1. Web应用自动配置
    • 引入spring-boot-starter-web后:

    ◦ 自动注册Tomcat容器(默认线程数200,最大连接数10000)

    ◦ 配置Jackson序列化器(JSON转换),默认启用日期格式化yyyy-MM-dd HH:mm:ss

    ◦ 代码示例:

    ```java
    @SpringBootApplication  // 触发自动配置
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args); // 启动Tomcat
        }
    }
    ```
    
  2. 数据库自动配置
    • 引入spring-boot-starter-data-jpa后:

    ◦ 自动配置HikariCP连接池(默认最小连接数10,最大100)

    ◦ 根据application.properties配置生成DataSource:

    ```properties
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=123456
    ```
    
  3. 自定义自动配置(实战)
    • 步骤:

    1. 创建MyServiceAutoConfiguration类,添加@ConditionalOnClass(MyService.class)
    2. 在META-INF/spring.factories中注册配置类:
      org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.MyServiceAutoConfiguration
      
      1
    3. 其他项目引入该Starter后,自动注入MyService实例。

四、性能与优化数据 • 启动速度优化:自动装配通过按需加载配置类,相比传统Spring应用减少约30%的启动时间

• 内存占用:条件化装配机制避免无用Bean的初始化,降低约20%的内存开销。


五、常见问题与解决 • 配置冲突:若自定义Bean与自动配置冲突,可通过@Primary注解优先使用自定义Bean

• 调试方法:启动时添加--debug参数,控制台输出匹配的自动配置类列表(如Spring Boot 3.0输出匹配的86个配置类)。


通过上述机制,Spring Boot实现了“约定优于配置”,开发者仅需关注业务代码,底层组件由框架智能装配。如需深入源码,可参考spring-boot-autoconfigure模块的META-INF/spring.factories文件。

编辑 (opens new window)
上次更新: 2025/06/10, 09:18:05
Spring Boot自动装配基于SPI实现的吗
MyBatis插入数据后回填id

← Spring Boot自动装配基于SPI实现的吗 MyBatis插入数据后回填id→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式