最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中@AutoConfiguration和@Configuration區(qū)別

 更新時間:2025年09月22日 10:53:28   作者:生無謂  
@AutoConfiguration是Spring Boot2.4引入的一個新注解,用于標記自動配置類,它是對傳統(tǒng)@Configuration 注解的增強,下面就來詳細的介紹一下這兩者的區(qū)別,感興趣的可以了解一下

@AutoConfiguration 是 Spring Boot 2.4 引入的一個新注解,用于標記自動配置類。它是對傳統(tǒng) @Configuration 注解的增強,專門用于自動配置場景。

@AutoConfiguration 注解詳解

1. 基本作用

@AutoConfiguration 是一個復合注解,主要用于標識自動配置類,它提供了比 @Configuration 更明確的語義和更好的功能。

2. 注解定義

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface AutoConfiguration {
    
    /**
     * 自動配置類的處理順序
     */
    AutoConfigurationPhase before() default AutoConfigurationPhase.NONE;
    
    /**
     * 在指定的自動配置類之后處理
     */
    Class<?>[] after() default {};
    
    /**
     * 在指定的自動配置類之前處理
     */
    Class<?>[] before() default {};
}

3. 與 @Configuration 的區(qū)別

// 傳統(tǒng)方式
@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    // 配置內容
}

// 新方式(推薦)
@AutoConfiguration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    // 配置內容
}

4. 主要特性

4.1 明確的語義(使用@Configuration的類只知道是一個配置類,并不知道是自動配置類)

// 明確表示這是一個自動配置類
@AutoConfiguration
@ConditionalOnClass(RedisTemplate.class)
public class RedisAutoConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public RedisTemplate redisTemplate() {
        return new RedisTemplate();
    }
}

4.2 排序控制

// 控制自動配置的執(zhí)行順序
@AutoConfiguration(
    before = DataSourceAutoConfiguration.class,
    after = WebMvcAutoConfiguration.class
)
@ConditionalOnClass(DataSource.class)
public class CustomDataSourceAutoConfiguration {
    // 配置內容
}

5. 實際應用示例

5.1 基礎自動配置類

@AutoConfiguration
@ConditionalOnClass(MyService.class)
@EnableConfigurationProperties(MyServiceProperties.class)
public class MyServiceAutoConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public MyService myService(MyServiceProperties properties) {
        MyServiceImpl service = new MyServiceImpl();
        service.setConfig(properties);
        return service;
    }
}

5.2 帶排序的自動配置(決定當前自動配置類,在誰創(chuàng)建之前或者之后配置)

@AutoConfiguration(
    before = {DataSourceAutoConfiguration.class},
    after = {WebMvcAutoConfiguration.class}
)
@ConditionalOnClass(CacheManager.class)
@EnableConfigurationProperties(CacheProperties.class)
public class CacheAutoConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public CacheManager cacheManager(CacheProperties properties) {
        return new CustomCacheManager(properties);
    }
}

5.3 條件化自動配置

@AutoConfiguration
@ConditionalOnWebApplication
@ConditionalOnClass(Servlet.class)
@ConditionalOnProperty(prefix = "my.web", name = "enabled", havingValue = "true", matchIfMissing = true)
public class WebAutoConfiguration {
    
    @Bean
    public WebInterceptor webInterceptor() {
        return new WebInterceptor();
    }
    
    @Bean
    public WebFilter webFilter() {
        return new WebFilter();
    }
}

6. 與其他注解的配合使用

6.1 與條件注解配合

@AutoConfiguration
@ConditionalOnClass(JdbcTemplate.class)
@ConditionalOnProperty(name = "my.jdbc.enabled", havingValue = "true", matchIfMissing = true)
public class JdbcAutoConfiguration {
    
    @Bean
    @Primary
    @ConditionalOnMissingBean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

6.2 與屬性配置注解配合

@AutoConfiguration
@EnableConfigurationProperties({
    DatabaseProperties.class,
    ConnectionProperties.class
})
@ConditionalOnClass(DataSource.class)
public class DatabaseAutoConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public DataSource dataSource(DatabaseProperties dbProps, ConnectionProperties connProps) {
        // 創(chuàng)建數據源
        return createDataSource(dbProps, connProps);
    }
}

7. 優(yōu)勢和特點

7.1 語義明確

  • 明確標識這是一個自動配置類
  • 提高代碼可讀性和維護性

7.2 排序支持

@AutoConfiguration(
    before = DataSourceAutoConfiguration.class,
    after = WebMvcAutoConfiguration.class
)

7.3 與Spring Boot生態(tài)系統(tǒng)集成

  • spring.factoriesAutoConfiguration.imports 文件配合使用
  • 支持Spring Boot的條件化配置機制

8. 完整示例

// 自定義屬性配置類
@ConfigurationProperties(prefix = "myapp.service")
public class MyServiceProperties {
    private String url = "http://localhost:8080";
    private int timeout = 5000;
    private boolean enabled = true;
    
    // getters and setters
}

// 自動配置類
@AutoConfiguration
@ConditionalOnClass(MyService.class)
@ConditionalOnProperty(prefix = "myapp.service", name = "enabled", havingValue = "true", matchIfMissing = true)
@EnableConfigurationProperties(MyServiceProperties.class)
public class MyServiceAutoConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public MyService myService(MyServiceProperties properties) {
        MyService service = new MyServiceImpl();
        service.setUrl(properties.getUrl());
        service.setTimeout(properties.getTimeout());
        return service;
    }
    
    @Bean
    @ConditionalOnMissingBean
    public MyServiceClient myServiceClient(MyService myService) {
        return new MyServiceClient(myService);
    }
}

9. 最佳實踐

  1. 使用明確的語義:優(yōu)先使用 @AutoConfiguration 而不是 @Configuration
  2. 合理的條件注解:結合使用 @ConditionalOnClass、@ConditionalOnMissingBean
  3. 屬性配置:使用 @EnableConfigurationProperties 管理配置屬性
  4. 排序控制:必要時使用 beforeafter 屬性控制執(zhí)行順序
  5. 文檔注釋:為自動配置類添加清晰的文檔說明

@AutoConfiguration 注解使自動配置類的意圖更加明確,提供了更好的排序控制,并且是Spring Boot 2.4+推薦的標準做法。

到此這篇關于 SpringBoot中@AutoConfiguration和@Configuration區(qū)別的文章就介紹到這了,更多相關 SpringBoot @AutoConfiguration @Configuration內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一篇文章帶你從java字節(jié)碼層理解i++和++i

    一篇文章帶你從java字節(jié)碼層理解i++和++i

    這篇文章帶你從java字節(jié)碼層理解i++和++i,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • Java使用SLF4J記錄不同級別日志的示例詳解

    Java使用SLF4J記錄不同級別日志的示例詳解

    SLF4J是一個簡單的日志門面,它允許在運行時選擇不同的日志實現(xiàn),這篇文章主要為大家詳細介紹了如何使用SLF4J記錄不同級別日志,感興趣的可以了解下
    2025-04-04
  • SpringBoot3集成Quartz的示例代碼

    SpringBoot3集成Quartz的示例代碼

    Quartz由Java編寫的功能豐富的開源作業(yè)調度框架,可以集成到幾乎任何Java應用程序中,并且能夠創(chuàng)建多個作業(yè)調度,在實際的業(yè)務中,有很多場景依賴定時任務,比如常見的:訂單超時處理,業(yè)務識別和預警通知等,本文介紹了SpringBoot3如何集成Quartz
    2023-08-08
  • Spring MVC 請求參數綁定實現(xiàn)方式

    Spring MVC 請求參數綁定實現(xiàn)方式

    Spring MVC 是一個用于構建 Web 應用程序的框架,它提供了一種方便的方式來處理 HTTP 請求和響應,Spring MVC 提供了多種方式來實現(xiàn)請求參數綁定,本文結合實例代碼給大家介紹的非常詳細,需要的朋友跟隨小編一起看看吧
    2023-09-09
  • SpringMVC上傳和解析Excel方法

    SpringMVC上傳和解析Excel方法

    這篇文章主要介紹了SpringMVC上傳和解析Excel方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 淺談如何優(yōu)雅地停止Spring Boot應用

    淺談如何優(yōu)雅地停止Spring Boot應用

    這篇文章主要介紹了淺談如何優(yōu)雅地停止Spring Boot應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Java中遍歷Map的六種方法實現(xiàn)

    Java中遍歷Map的六種方法實現(xiàn)

    這篇文章主要介紹了Java中遍歷Map的六種方法,Map是常用的數據結構之一,它提供了鍵值對的存儲方式,可以方便地進行數據查找和操作,感興趣想要詳細了解可以參考下文
    2023-05-05
  • SpringCloud中數據認證加密的方法總結

    SpringCloud中數據認證加密的方法總結

    在當今分布式系統(tǒng)的日益復雜和信息傳遞的廣泛網絡化環(huán)境中,數據的加密和認證作為保障信息傳遞安全的關鍵手段,Spring?Cloud,作為一套構建微服務架構的強大框架,提供了多種靈活而強大的數據加密和認證方式,本文給大家總結了SpringCloud數據認證加密的方法
    2024-03-03
  • BeanUtils.copyProperties擴展--實現(xiàn)String轉Date

    BeanUtils.copyProperties擴展--實現(xiàn)String轉Date

    這篇文章主要介紹了BeanUtils.copyProperties擴展--實現(xiàn)String轉Date操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot Starter機制及整合tomcat的實現(xiàn)詳解

    SpringBoot Starter機制及整合tomcat的實現(xiàn)詳解

    這篇文章主要介紹了SpringBoot Starter機制及整合tomcat的實現(xiàn),我們知道SpringBoot自己在“后臺”幫我們配置了很多原本需要我們手動去的東西,至于這個“后臺”是啥,就是Starter機制
    2022-09-09

最新評論

涞水县| 永泰县| 宁化县| 南雄市| 涟水县| 黔东| 平乡县| 章丘市| 河南省| 绩溪县| 达孜县| 东台市| 易门县| 安庆市| 三门峡市| 长葛市| 杨浦区| 从江县| 商城县| 伊吾县| 昭平县| 武安市| 宜都市| 家居| 上高县| 长寿区| 旬邑县| 铁岭县| 大名县| 阿城市| 泰来县| 芜湖县| 洪泽县| 葫芦岛市| 上林县| 鄂温| 临邑县| 昆明市| 阆中市| 垫江县| 香格里拉县|