spring boot 自动配置

自动配置介绍

Spring Boot自动装配(Auto Configuration)是Spring Boot框架的一个关键特性,它通过约定大于配置的方式来简化项目的配置过程。自动装配允许开发人员使用默认的配置,同时也可以根据需要进行定制化。Spring通过使用@Autowired注解、@ComponentScan注解以及条件化配置等机制,实现了自动装配的功能。

@Autowired注解: 通过在类的构造方法、成员变量或方法上使用@Autowired注解,Spring容器可以自动满足Bean之间的依赖关系。当容器启动时,它会扫描并识别带有@Autowired注解的地方,并自动装配相应的Bean。

@ComponentScan注解: 使用@ComponentScan注解可以告诉Spring容器在指定的包或类路径下扫描并注册所有标有@Component及其相关注解(如@Service@Repository等)的类作为Bean。这样,开发者无需手动在配置文件中逐个声明每个Bean,而是通过约定大于配置的方式,让Spring自动发现和注册Bean。

条件化配置: Spring Boot通过条件化配置来决定是否需要加载某个配置类或Bean。条件注解(如@ConditionalOnClass@ConditionalOnBean@ConditionalOnProperty等)在配置类上使用,根据一定的条件来判断是否满足加载的条件。

自动配置类: Spring Boot中的自动配置类通常以xxxAutoConfiguration命名的方式,它包含了一系列的Bean定义和配置,根据条件是否满足,自动配置相应的功能。这些类位于spring-boot-autoconfigure模块中。

自动配置的重要注解

  • @EnableAutoConfiguration: 这是Spring Boot自动配置的核心注解。通常在应用的主类上使用该注解,它会启用Spring Boot的自动配置机制。@EnableAutoConfiguration会根据项目的依赖关系和配置自动装配和配置Spring Bean。它通常与@SpringBootApplication一起使用,并启用自动配置机制。通过@EnableAutoConfiguration,Spring Boot会根据项目的依赖自动配置Bean。

  • @Configuration: 该注解表示一个配置类,其中定义了一些Bean的创建和配置。自动配置类通常使用@Configuration注解进行标记。类似于传统的XML配置文件。自动配置类通常会使用@Configuration注解,用于告诉Spring容器这是一个配置类。

  • @AutoConfigureAfter: 该注解指定自动配置类的加载顺序。通过指定其他自动配置类的类名,确保配置类的加载顺序正确。

  • @ConfigurationProperties: 该注解用于绑定配置属性到Java对象。可以在自动配置类及其他组件中使用,将应用程序的配置项映射到对应的属性。

  • @Bean: 用于在配置类中注册Bean。@Bean注解通常与@Configuration一起使用,在方法级别上标记一个方法返回的对象应该被注册为一个Bean。

自动配置实现

自动装配的入口:org.springframework.boot.autoconfigure.AutoConfigurationImportSelector

spring-autoconfigure-metadata.properties:
spring-autoconfigure-metadata.properties 文件存储的是"待自动装配候选类"过滤的计算规则,这个信息很重要,框架会根据里面的规则逐一对候选类进行计算看是否需要被自动装配进容器,并不是全部加载。

spring.factories:

存储了spring-boot所有默认支持的待自动装配候选类,文件通常位于 resources/META-INF 目录下,并且以键值对的形式进行配置。每个键对应一个配置项,值则为对应配置项的实现类。

可以看一下这个博主的分享,非常的详细:

Springboot自动装配之spring-autoconfigure-metadata.properties和spring.factories(SPI机制核心)-CSDN博客

相关推荐
摇滚侠3 分钟前
Spring Boot 3零基础教程,WEB 开发 HttpMessageConverter @ResponseBody 注解实现内容协商源码分析 笔记33
java·spring boot·笔记
计算机毕业设计小帅20 分钟前
【2026计算机毕业设计】基于Springboot的校园电动车短租平台
spring boot·后端·课程设计
调试人生的显微镜20 分钟前
Web前端开发工具实战指南 从开发到调试的完整提效方案
后端
静心观复20 分钟前
drawio画java的uml的类图时,class和interface的区别是什么
java·uml·draw.io
Java水解21 分钟前
【SQL】MySQL中空值处理COALESCE函数
后端·mysql
Laplaces Demon22 分钟前
Spring 源码学习(十四)—— HandlerMethodArgumentResolver
java·开发语言·学习
guygg8826 分钟前
Java 无锁方式实现高性能线程
java·开发语言
ss27327 分钟前
手写Spring第7弹:Spring IoC容器深度解析:XML配置的完整指南
java·前端·数据库
Python私教29 分钟前
DRF:Django REST Framework框架介绍
后端·python·django
间彧31 分钟前
Java HashMap如何合理指定初始容量
后端