文章目錄
- @Configuration與@AutoConfiguration
- 一、@Configuration
- 二、@AutoConfiguration
@Configuration與@AutoConfiguration
一、@Configuration
這是最常用的 Spring 注解之一,表示當前類是一個 配置類,可以定義 @Bean 方法,等效于傳統的 XML 配置文件。
特點:
- 明確地告訴 Spring 這個類是配置類。
- 常用于顯式配置,由開發者自己創建、引用。
- @Bean 方法定義的組件會注冊到 Spring 容器中。
示例:
@Configuration
public class MyConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}
只要MyConfig
在@SpringBootApplication
掃描范圍內,那么該Bean就會被加載。
二、@AutoConfiguration
這是 Spring Boot 提供的注解,用于自動配置類。
特點:
- 由 Spring Boot 自動加載,配合 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 使用。
- 用于按需加載配置,支持條件注解(如 @ConditionalOnClass, @ConditionalOnProperty 等)。
- 主要用于自動配置組件,如 Spring Boot 中的 starter 自動裝配機制。
示例:
package org.kaishu.framework.swagger;@AutoConfiguration
// 判斷是否引入了 OpenAPI 類,否則自動配置不啟用
@ConditionalOnClass({OpenAPI.class})
//只有當 springdoc.api-docs.enabled=true 或未配置(默認值)時,這段配置才會啟用
@ConditionalOnProperty(prefix = "springdoc.api-docs", name = "enabled", havingValue = "true", matchIfMissing = true)
@EnableConfigurationProperties(SwaggerProperties.class)
public class KaishuSwaggerAutoConfiguration {
...
}
注:
需要在 resource下創建文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
并在文件中聲明此類,Spring Boot 才會自動掃描并導入,不需要添加包路徑到@SpringBootApplication
掃描范圍中。
文件示例:
org.kaishu.framework.swagger.KaishuSwaggerAutoConfiguration