出現(xiàn)版本與背景
@Configuration:這是 Spring 框架中很早就存在的注解,從 Spring 3.0 開始引入。它用于將一個類標記為配置類,這個類可以包含多個 @Bean 方法,其作用類似于傳統(tǒng)的 Spring XML 配置文件。
@AutoConfiguration:是 Spring Boot 3.0 引入的新注解,主要為了簡化自動配置類的定義,讓自動配置類的聲明更加清晰和規(guī)范。他包含了@Configuration
功能用途
@Configuration
手動配置 Bean:開發(fā)者使用 @Configuration 注解自定義配置類,在其中通過 @Bean 方法手動定義和注冊 Bean 到 Spring 容器中??梢跃_控制 Bean 的創(chuàng)建、初始化和依賴注入過程。
管理應(yīng)用特定配置:常用于管理應(yīng)用內(nèi)部特定的配置,例如自定義數(shù)據(jù)源、事務(wù)管理器等。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
@AutoConfiguration
自動配置 Bean:主要用于自動配置類,Spring Boot 在啟動時會根據(jù)類路徑、配置屬性等條件自動加載和應(yīng)用這些配置類。這些配置類通常是為了集成第三方庫或提供通用的功能而設(shè)計的。
減少開發(fā)者配置工作量:開發(fā)者只需引入相應(yīng)的依賴,Spring Boot 就能根據(jù)自動配置類自動完成 Bean 的注冊和配置,無需手動編寫大量的配置代碼。
應(yīng)用場景
@Configuration
自定義業(yè)務(wù)邏輯配置:當需要根據(jù)應(yīng)用的具體業(yè)務(wù)需求進行定制化配置時,使用 @Configuration 注解。
局部配置調(diào)整:針對應(yīng)用中的某些特定模塊或功能進行局部的配置調(diào)整。
@AutoConfiguration
集成第三方庫:當引入第三方庫時,Spring Boot 提供的自動配置類(使用 @AutoConfiguration 注解)可以自動完成與該庫相關(guān)的 Bean 配置。例如,引入 Redis 依賴后,Spring Boot 會自動配置 Redis 連接池和 RedisTemplate 等 Bean。
通用功能配置:用于配置一些通用的功能,如日志、緩存等,減少開發(fā)者的重復(fù)配置工作。
條件注解使用
@Configuration:可以結(jié)合條件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等)使用,但通常是在手動控制配置的情況下使用,開發(fā)者需要明確指定條件。
@AutoConfiguration:自動配置類通常會大量使用條件注解,Spring Boot 根據(jù)類路徑中的類、配置屬性等自動判斷是否啟用該自動配置類,以實現(xiàn)按需配置。
加載機制
@Configuration:需要通過組件掃描(如 @ComponentScan)或在 @SpringBootApplication 所在包及其子包下才能被 Spring 容器發(fā)現(xiàn)和加載,或者通過 @Import 注解顯式引入。
@AutoConfiguration:Spring Boot 會根據(jù) META - INF/spring.factories 文件(Spring Boot 3.0 之后也支持 META - INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件)中的配置自動加載這些自動配置類,無需開發(fā)者手動引入。
總結(jié):
@AutoConfiguration 是一種特殊的@Configuration , 一般用來開發(fā)三方庫,通過spring.factories 實現(xiàn)自動加載