有条件的bean注入会引发错误“类型'javax.sql.DataSource'没有合格的bean”

时间:2018-10-08 23:00:01

标签: spring dependency-injection conditional javabeans

我已经定义了一个条件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;
    }

}

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

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

但是,当条件类match方法返回时,则为false, 我得到:

  

“不存在类型为'javax.sql.DataSource'的合格Bean”

如果match返回true,则没有错误。

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

1 个答案:

答案 0 :(得分:1)

是的,这就是有条件Bean加载的目的。

matches方法返回false时,您会收到错误消息,因为不再有可用于自动装配的bean。您还应该为这种情况定义一个DataSource(因此,如果当前的DataSource返回false,则类型为matches的bean可用)。

您可以在扩展了@Configuration的另一个Condition中执行此操作,为此,matches方法将返回与您当前定义的matches相对的值。