咱們知道在Spring及SpringBoot裏按條件建立Bean的核心是Condition
接口與Conditional
註解,其實在SpringBoot裏還有一種AutoConfigure也能夠來過濾配置,只不過使用這種技術,可以讓SpringBoot更快速的啓動,那麼下面咱們就來看一下具體怎麼實現的。java
SpringBoot使用一個Annotation的處理器來收集一些自動裝配的條件,那麼這些條件能夠在META-INF/spring-autoconfigure-metadata.properties
進行配置。SpringBoot會將收集好的@Configuration
進行一次過濾進而剔除不知足條件的配置類。spring
在咱們建立好的SpringBoot項目裏添加一個AutoConfiguration
:函數
package com.ys.zhshop.member.config; import com.ys.zhshop.member.service.MemberRegisterService; import org.springframework.context.annotation.Bean; public class MemberAutoConfiguration { @Bean public MemberRegisterService registerService() { return new MemberRegisterService(); } }
在MemberRegisterService裏的構造函數輸出一段內容看看Spring是否幫咱們初始化
緊接着在META-INF/spring.factories
裏配置對應的引導:spa
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.ys.zhshop.member.config.MemberAutoConfiguration
隨後咱們須要在META-INF目錄下建立一個spring-autoconfigure-metadata.properties
文件,內容以下:code
com.ys.zhshop.member.config.MemberAutoConfiguration.ConditionalOnClass=java.lang.Strings
格式:自動配置的類全名.條件=值
blog
在這裏咱們先指定一個類路徑下不存在的Java類,啓動後並無相關信息的輸出,那麼把其值改爲java.land.String
,那麼咱們啓動能夠發現:
在這裏,咱們能夠在控制檯看到構造函數輸出的值,這就說明咱們的Bean的的確確被建立了
下面我貼出一個spring-cloud-netflix-core下的配置,主要來看看這些條件該怎麼寫,你們若是想使用能夠參考人家的來配置:接口