@AutoConfiguration 和Configuration區(qū)別

出現(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)自動加載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容