@ConditionalOnExpression 条件注解

想要实现的功能:

我想在配置文件中设置一个开关,enabled,在开关为true的时候才实例化bean,进行相关业务逻辑的操作。

具体实现:

  1. 在特定情况下初始化bean,实例化bean

  2. 配置类

代码:

想要实例化的 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.*")}
)
上次更新时间: 2024/5/7 05:59:02