咱们知道在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下的配置,主要来看看这些条件该怎么写,你们若是想使用能够参考人家的来配置:接口