@ConditionalOnExpression 条件注解
想要实现的功能:
我想在配置文件中设置一个开关,enabled,在开关为true的时候才实例化bean,进行相关业务逻辑的操作。
具体实现:
在特定情况下初始化bean,实例化bean
配置类
代码:
想要实例化的 bean:在这个类加@Component
注解,核心注解@ConditionalOnExpression
,根据表达式进行判断是否注入 bean 到 Spring
@Component
@ConditionalOnExpression("#{!'dev52'.equals('${spring.profiles.active:null}')}")
public class OrderMessageMonitor {
public OrderMessageMonitor(ConfigContext configContext) {
……
}
public doSomeThing() {
}
}
对应其他字符串类型:
@ConditionalOnExpression("${mq.cumsumer.enabled} == 1 && ${rabbitmq.comsumer.enabled:true}")
@Primary:自动装配时当出现多个 Bean 候选者时,被注解为 @Primary 的 Bean 将作为首选者,否则将抛出异常
@dependenOn
@ConditionalonBean(EsComponent.class)
@PostConstruct
该注解是Java自己提供的注解,表示此方法是在Spring实例化该Bean之后马上执行此方法,之后才会去实例化其他Bean,并且一个Bean中 @PostConstruct 注解的方法可以有多个
@NestedConfigurationProperty
使用这个支持复杂类型直接引用,对应配置为 elasticsearch.datasource, 需要注意的是,这里全部都要private属性,并且提供get、set方法,不然会null。
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class DataSourceInfoConfig {
@NestedConfigurationProperty
private DatasourceInfo datasource;
}
启动排除组件
@ComponentScan(
basePackages = {"com"},
excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.process.*")}
)