@ConditionalOnExpression
@ConditionalOnExpression(“'true”) 当括号中的内容为true时 ,使用该注解的类被实例化
它可以和@Service、@Component、@Controller、@Repository 、@Bean 、@Configuration 等注解一起使用。可以通过SPEL 表达式、读取配置文件属性来让IOC容器选择性的扫描加入指定的某个Bean。而不是将所有实现类Bean都加入到IOC。简单来说就是按需加载,而不是全部加载。
@Bean
@ConditionalOnExpression("#{'true'.equals(environment['print.sql.log.enable'])}")
public SqlInterceptor myPlugin() {
return new SqlInterceptor();
}
@ConditionalOnExpression 三种玩法
@Configuration
public class MyConfiguration {
@Bean
@ConditionalOnExpression("'${spring.application.name}' == 'app-api' || '${spring.application.name}' == 'web-api'")
public MyBean myBean() {
return new MyBean();
}
}
@Configuration
public class MyConfiguration {
@Bean
@ConditionalOnProperty(name = "spring.application.name", havingValue = "app-api")
@ConditionalOnProperty(name = "spring.application.name", havingValue = "web-api")
public MyBean myBean() {
return new MyBean();
}
}
import org.springframework.boot.autoconfigure.condition.Conditional;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
@Configuration
public class MyConfiguration {
@Bean
@Conditional(OnApplicationNameCondition.class)
public MyBean myBean() {
return new MyBean();
}
public static class OnApplicationNameCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String applicationName = context.getEnvironment().getProperty("spring.application.name");
return "app-api".equals(applicationName) || "web-api".equals

最低0.47元/天 解锁文章
4415

被折叠的 条评论
为什么被折叠?



