SpringBoot核心:自动配置

有使用过SSM框架的,还记得曾经在spring-mybatis.xml配置了多少内容吗?数据源、连接池、会话工厂、事务管理···,而现在Spring Boot告诉你这些都不需要了,简单的几个注解统统搞定,是不是很方便!

前言

SpringBoot的自动装配(Auto-configuration)是其核心特性之一,旨在简化应用程序的配置过程。通过自动装配,能够根据类路径中的依赖关系自动配置 Spring 应用程序上下文,容器启动后,一些配置类、bean对象自动存入到了IOC容器中,不需要我们去手动声明,从而简化了开发,省去了繁琐的配置操作。这大大减少了开发者需要手动配置的内容,使得应用程序开发变得更加容易。

□ 自动配置的优势

1. 简化配置

减少了大量重复性的、模板化的配置代码,使项目结构更加简洁,通过自动检测和配置依赖项,开发者可以更快地搭建起一个功能完备的应用程序,无需从头开始编写复杂的配置文件。

2. 提高生产力

减少了手动配置的工作,即减少了配置错误的可能性,提高应用程序的稳定性,同时降低了学习曲线,开发人员能够更专注于业务逻辑开发。

3. 增强可维护性

自动配置确保了所有使用相同依赖的项目都遵循一致的配置标准,通过查看 application.properties 或 application.yml 文件以及相关注释,其他开发者更容易理解应用的配置意图。

4. 灵活可控

可以根据项目需要,选择最适合当前环境的配置

□ 自动配置核心

  • 起步依赖

    在没有使用springboot之前,项目中需要引入很多依赖jar,然而使用springboot之后只需要引入一个spring-boot-starter-web,为什么?难道不需要了?先看一下这个jar包依赖的其他jar,如下图:

    图中我看可以看出spring-boot-starter-web所依赖jar,不仅包含Tomcat、JSON还有spring-webmvc、spring-aop、spring-context等,因此可以看出并不是不需要,而是依托Maven的依赖传递简化了。

  • 自动装配

    一个SpringBoot工程想要成功运行,就必须拥有一个被@SpringBootApplication 注解标识的主程序类,为什么一个 @SpringBootApplication注解就能完成?点进注解看一下,如图:

    核心注解包含三个

    a. @SpringBootConfiguration

    使用@Configuration修饰这个注解。代表当前这个注解是一个配置类

    b. @ComponentScan

    用于扫描组件,相当于context:component-scan,可以指定多个路径,将需要扫描装配路径中的所有spring组件;默认扫描该类所在包及其子包下所有带有指定注解的类,将它们自动装配到bean容器中,会被自动装配的注解包括@Controller、@Service、@Component、@Repository等。也可以指定扫描路径。

    c. @EnableAutoConfiguration

    开启自动导包配置注解,点进去之后发现里面核心注解是@AutoConfigurationPackage和@Import(AutoConfiguration***.class),而使用@Import导入的类会被Spring加载到IOC容器中。这里导入了AutoConfigurationImportSelector类。这个类中有一个非常重要的方法------selectImports(),它几乎涵盖了组件自动装配的所有处理逻辑,包括获得候选配置类、配置类去重、排除不需要的配置类、过滤等,最终返回符合条件的自动配置类的全限定名数组。逻辑大致如下:

    ● 从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;

    ● 去重,并将exclude和excludeName属性携带的类排除;

    ● 过滤,将满足条件(@Conditional)的自动配置类返回;

总结

spring boot的两个核心特性:起步依赖和自动配置

起步依赖的原理:maven的依赖传递

自动配置的原理:条件注入

相关推荐
Magic--8 分钟前
深入解析管道:最基础的进程间通信(IPC)实现
java·服务器·unix
JOEH6015 分钟前
Java 后端开发中的内存泄漏问题:90% 开发者都会踩的 5 个坑
后端
_野猪佩奇_牛马版16 分钟前
多智能体协作 - 使用 LangGraph 子图实现
后端
JOEH6016 分钟前
为什么你的数据库连接总超时?99% 的 Java 程序员都踩过这 5 个坑
后端
后端不背锅18 分钟前
对外接口设计完全指南:安全、高性能、可演进
后端
IT小崔33 分钟前
SqlSugar 使用教程
数据库·后端
Oneslide35 分钟前
Docker Compose 重启 RabbitMQ 数据丢失?
后端
架构师沉默36 分钟前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
开心就好202540 分钟前
Win11 抓包工具怎么选?网页请求与设备流量抓取
后端·ios
带刺的坐椅42 分钟前
SolonCode v2026.4.1 发布(比 ClaudeCode 简约的编程智能体)
java·ai·llm·agent·solon-ai·claudecode·soloncode