我有一个配置类,它根据一个非常简单的条件(检查 application.properties 中的属性值)注册 bean。配置类和条件如下:
@Configuration
@Conditional(DatabaseConfigurationCondition.class)
@ComponentScan(basePackageClasses = DBConfigComponents.class)
public class DatabaseConfigurationLoader {
@Bean
public DatabaseConfigurationRepository databaseConfigurationRepository() {
return new DatabaseConfigurationRepository();
}
}
和
public class DatabaseConfigurationCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("configuration.type").contains("db");
}
}
除了在这个配置类中注册的 bean 之外,我还有组件扫描,它扫描其他组件。当条件不满足时,我希望配置类中定义的 bean 不会被注册(碰巧是这种情况),但我也希望其他用@Component
(or @Repository
, @Service
, etc..) 注释的类和与不注册的标记接口在同一文件夹中DBConfigComponents.class
,这不会发生。被扫描的 Bean 总是被注册,无论条件是否满足。
当我把它@Conditional(DatabaseConfigurationCondition.class)
放在每个带@Component
注释的类上时,它工作正常,但我不想把它单独放在每个类上。
有什么建议吗?