我们知道在Spring及SpringBoot里按条件创建Bean的核心是Condition
接口与Conditional
注解,其实在SpringBoot里还有一种AutoConfigure也可以来过滤配置,只不过使用这种技术,能够让SpringBoot更快速的启动,那么下面我们就来看一下具体怎么实现的。
autoconfigure Module
SpringBoot使用一个Annotation的处理器来收集一些自动装配的条件,那么这些条件可以在META-INF/spring-autoconfigure-metadata.properties
进行配置。SpringBoot会将收集好的@Configuration
进行一次过滤进而剔除不满足条件的配置类。
演示示例
在我们创建好的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
里配置对应的引导:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ys.zhshop.member.config.MemberAutoConfiguration
随后我们需要在META-INF目录下创建一个spring-autoconfigure-metadata.properties
文件,内容如下:
com.ys.zhshop.member.config.MemberAutoConfiguration.ConditionalOnClass=java.lang.Strings
格式:自动配置的类全名.条件=值
在这里我们先指定一个类路径下不存在的Java类,启动后并没有相关信息的输出,那么把其值改成java.land.String
,那么我们启动可以发现:
在这里,我们可以在控制台看到构造函数输出的值,这就说明我们的Bean的的确确被创建了
下面我贴出一个spring-cloud-netflix-core下的配置,主要来看看这些条件该怎么写,大家如果想使用可以参考人家的来配置: