条件 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
相反的值].
我已经定义了一个条件 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
相反的值].