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博客

相关推荐
卑微小文1 分钟前
国内二手电商交易数据挖掘:代理IP解锁隐藏商机
后端
import_random11 分钟前
[go]空导入
后端
盖世英雄酱5813613 分钟前
三五年前面试java都问的是什么问题
java·后端·面试
Lojarro21 分钟前
SpringBoot第三站:整合SpringMVC
java·spring boot·spring
心灵宝贝27 分钟前
Apache Tomcat 7.0.41安装指南 (附安装包)
java·tomcat·apache
倔强的石头10636 分钟前
【C++经典例题】反转字符串中单词的字符顺序:两种实现方法详解
java·c++·算法
rider1891 小时前
深入解析java Socket通信中的粘包与拆包问题及解决方案(中)
java·开发语言·websocket
Michael_lcf1 小时前
kubernetes对于一个nginx服务的增删改查
java·nginx·kubernetes
程序视点1 小时前
Java中JDK里用到了哪些设计模式?让面试官眼前一亮!
java·设计模式
青云交1 小时前
Java 大视界 -- Java 大数据在智能政务舆情引导与公共危机管理中的应用(138)
java·大数据·数据采集·情感分析·政务·舆情引导·公共危机管理