我已经定义了一个条件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吗?
答案 0 :(得分:1)
是的,这就是有条件Bean加载的目的。
matches
方法返回false时,您会收到错误消息,因为不再有可用于自动装配的bean。您还应该为这种情况定义一个DataSource
(因此,如果当前的DataSource
返回false,则类型为matches
的bean可用)。
您可以在扩展了@Configuration
的另一个Condition
中执行此操作,为此,matches
方法将返回与您当前定义的matches
相对的值。