条件 bean 注入抛出错误“没有 'javax.sql.DataSource' 类型的合格 bean 可用”

Conditional bean injection throws error " No qualifying bean of type 'javax.sql.DataSource' available"

我已经定义了一个条件 bean :

@Conditional(CustomClass.class)
public class CustomClass implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return false;
    }

    @Bean(name = "bean1")
    public DataSource dummy() {
        HikariDataSource dataSource = new HikariDataSource(config);
        return dataSource;
    }

}

在另一个class中,我按如下方式注入bean1:

public anotherClass(@Qualifier("bean1") DataSource dataSource) {
}

但是,当条件 class 匹配方法 returns 时,false, 我得到:

"No qualifying bean of type 'javax.sql.DataSource' available"

如果匹配returns为真,则没有错误。

条件bean的目的不就是有条件地加载bean吗?

是的,这就是条件加载 bean 的目的。

matches 方法 return 为 false 时会出现错误,因为不再有可用于自动装配的 bean。您还应该为这种情况定义一个 DataSource(因此,如果您当前的 matches return 为假,则类型为 DataSource 的 bean 是可用事件)。

您可以在扩展 Condition 的另一个 @Configuration 中执行此操作,并且 matches 方法将 return 与您当前定义的 matches 相反的值].