亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

@AutoConfiguration 是 Spring Boot 2.4 引入的一個(gè)新注解,用于標(biāo)記自動(dòng)配置類。它是對(duì)傳統(tǒng) @Configuration 注解的增強(qiáng),專門用于自動(dòng)配置場(chǎng)景。

@AutoConfiguration 注解詳解

1. 基本作用

@AutoConfiguration 是一個(gè)復(fù)合注解,主要用于標(biāo)識(shí)自動(dòng)配置類,它提供了比 @Configuration 更明確的語(yǔ)義和更好的功能。

2. 注解定義

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

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

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

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

4. 主要特性

4.1 明確的語(yǔ)義(使用@Configuration的類只知道是一個(gè)配置類,并不知道是自動(dòng)配置類)

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

4.2 排序控制

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

5. 實(shí)際應(yīng)用示例

5.1 基礎(chǔ)自動(dòng)配置類

@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 帶排序的自動(dòng)配置(決定當(dāng)前自動(dòng)配置類,在誰(shuí)創(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 條件化自動(dòng)配置

@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)建數(shù)據(jù)源
        return createDataSource(dbProps, connProps);
    }
}

7. 優(yōu)勢(shì)和特點(diǎn)

7.1 語(yǔ)義明確

  • 明確標(biāo)識(shí)這是一個(gè)自動(dòng)配置類
  • 提高代碼可讀性和維護(hù)性

7.2 排序支持

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

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

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

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
}

// 自動(dòng)配置類
@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. 最佳實(shí)踐

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

@AutoConfiguration 注解使自動(dòng)配置類的意圖更加明確,提供了更好的排序控制,并且是Spring Boot 2.4+推薦的標(biāo)準(zhǔn)做法。

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

相關(guān)文章

  • Java中如何獲取mysql連接的3種方法總結(jié)

    Java中如何獲取mysql連接的3種方法總結(jié)

    最近工作中需要用到mysql連接,發(fā)現(xiàn)實(shí)現(xiàn)的方法不止一個(gè),所以就來(lái)總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于Java中如何獲取mysql連接的3種方法,需要的朋友可以參考借鑒,感興趣的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 如何在SpringBoot中添加攔截器忽略請(qǐng)求URL當(dāng)中的指定字符串

    如何在SpringBoot中添加攔截器忽略請(qǐng)求URL當(dāng)中的指定字符串

    這篇文章主要介紹了在SpringBoot中添加攔截器忽略請(qǐng)求URL當(dāng)中的指定字符串,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)

    Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • SpringBoot中6種API版本控制策略小結(jié)

    SpringBoot中6種API版本控制策略小結(jié)

    API版本控制是確保系統(tǒng)平穩(wěn)演進(jìn)的關(guān)鍵策略,這篇文章主要為大家詳細(xì)介紹了SpringBoot中6種API版本控制策略,大家可以根據(jù)需要自行選擇
    2025-04-04
  • Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實(shí)現(xiàn)代碼

    Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 基于Java Tomcat和激活MyEclips的深入理解

    基于Java Tomcat和激活MyEclips的深入理解

    本篇文章是對(duì)Java中的Tomcat和激活MyEclips進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Java MyBatis框架環(huán)境搭建詳解

    Java MyBatis框架環(huán)境搭建詳解

    MyBatis本是apache的一個(gè)開源項(xiàng)目iBatis,MyBatis環(huán)境的搭建有點(diǎn)麻煩,本章帶你了解搭建過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2022-08-08
  • spring多個(gè)事務(wù)管理器踩坑及解決

    spring多個(gè)事務(wù)管理器踩坑及解決

    這篇文章主要介紹了spring多個(gè)事務(wù)管理器踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java中的AWT事件處理問(wèn)題

    java中的AWT事件處理問(wèn)題

    這篇文章主要介紹了java中的AWT事件處理問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 兩種實(shí)現(xiàn)Java類隔離加載的方法

    兩種實(shí)現(xiàn)Java類隔離加載的方法

    這篇文章主要介紹了兩種實(shí)現(xiàn)Java類隔離加載的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02

最新評(píng)論