@springbootconfiguration@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
@inherited
@springbootconfiguration
@enableautoconfiguration
@componentscan(excludefilters = )
由springboot定義,標註乙個springboot配置類,配置類相當於配置檔案,是容器中的乙個元件.
而@springbootconfiguration的註解@configuration是由spring定義.
@enableautoconfiguration@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
@configuration
public @inte***ce springbootconfiguration {}
開啟自動配置功能
被@autoconfigurationpackage(自動配置包)標註,
被@import(enableautoconfigurationimportselector.class)標註
enableautoconfigurationimportselector.class是決定匯入哪些元件的選擇器,父類autoconfigurationimportselector.class的public string selectimports(annotationmetadata annotationmetadata)方法將需要的元件以全類名的string的方式返回,新增到容器中,會給容器匯入很多自動配置類(***autoconfiguration,位於spring-boot-autoconfigure.jar),作用是匯入這個功能場景需要的所有元件並配置好,免去了手動編寫配置注入功能元件@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
@inherited
@autoconfigurationpackage
@import(enableautoconfigurationimportselector.class)
public @inte***ce enableautoconfiguration {}
得到這個string的方法是getcandidateconfigurations(annotationmetadata, attributes),內部呼叫springfactoriesloader.loadfactorynames(getspringfactoriesloade***ctoryclass(), getbeanclassloader()),@override
public string selectimports(annotationmetadata annotationmetadata)
try
catch (ioexception ex)
}
第乙個引數getspringfactoriesloade***ctoryclass()即enableautoconfiguration.class.
loadfactorynames方法protected listgetcandidateconfigurations(annotationmetadata metadata,
annotationattributes attributes)
通過類載入器的getresources方法(引數為"meta-inf/spring.factories")從類路徑下的meta-inf/spring.factories獲取enableautoconfiguration指定的值,這些值作為自動配置類匯入到容器中.public static listloadfactorynames(class<?> factoryclass, classloader classloader)
return result;
}catch (ioexception ex)
}
public static final string factories_resource_location = "meta-inf/spring.factories";
@autoconfigurationpackage又被@import(spring的底層註解,給容器中匯入乙個元件,由括起的autoconfigurationpackages.registrar.class來決定匯入的元件)標註.
@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
@inherited
@import(autoconfigurationpackages.registrar.class)
public @inte***ce autoconfigurationpackage {}
總結:@order(ordered.highest_precedence)
static class registrar implements importbeandefinitionregistrar, determinableimports
}
@springbootconfiguration將啟動類標註為乙個元件
@enableautoconfiguration開啟了自動配置功能
其中:2.1 @autoconfigurationpackage是掃瞄啟動類的包及其子包的元件,進行自動配置
2.2 @import(enableautoconfigurationimportselector.class)是按照功能場景的需求新增springboot自身的元件,進行自動配置
SpringBoot系列(四)資源檔案屬性配置
自定義資源檔案 1 首先在pom.xml中新增依賴,不新增的話讀取不到 org.springframework.boot spring boot configuration processor true 2 繫結資源檔案 configuration configurationproperties p...
基於springboot的多資料來源自動配置實現
最近做了乙個自動支援多資料來源配置的功能,基於springboot生態擴充套件,可自動識別配置檔案中的資料庫配置引數,並進行autoconfig。功能性 非功能性 注意事項 如何使用 1 要使用多資料來源自動配置,需要將springboot自帶的datasource相關自動配置類遮蔽自動啟動。在sp...
SpringBoot新增Swagger配置
swagger 是乙個規範和完整的框架,用於生成 描述 呼叫和視覺化 restful 風格的 web 服務。總體目標是使客戶端和檔案系統作為伺服器以同樣的速度來更新。檔案的方法 引數 模型緊密整合到伺服器端的 允許api來始終保持同步。swagger 讓部署管理和使用功能強大的api從未如此簡單。1...