所有组件(jar,wars)都具有带有bean-discovery-mode =“ annotated”的beans.xml。
DataProvider-接口,没有注释实现该接口的所有类。仅使用两种方法存在一个生产者:
@ApplicationScoped
public class DataProviderProducer {
@Resource(lookup = JndiNames.DS_OLTP)
private DataSource oltpDataSource;
@Resource(lookup = JndiNames.DS_RD)
private DataSource rdDataSource;
@Produces
@OLTP
public DataProvider createOltpDataProvider() {
return new JDBCDataProvider(oltpDataSource);
}
@Produces
@RD
public DataProvider createRdDataProvider() {
return new JDBCDataProvider(rdDataSource);
}
}
当这样注入时:
@Inject
@OLTP
private DataProvider dp;
我们收到以下错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type DataProvider with qualifiers @Default
at injection point [BackedAnnotatedField] @OLTP @Inject private mypackage.MyBean.dp
at mypackage.MyBean.dp(MyBean.java:0)
Possible dependencies:
- Producer Method [DataProvider] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @RD public mypackage.injection.DataProviderProducer.createRdDataProvider()],
- Producer Method [DataProvider] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @OLTP public mypackage.injection.DataProviderProducer.createOltpDataProvider()]
“带有限定符@Default的类型为DataProvider的模棱两可的依赖项-仅注入@RD或@OLTP注释,我在任何地方都不使用@Default。10次重新检查了代码中的所有内容,我不知道该怎么办。
[使用WildFly 18,OpenJDK 13。
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
public @interface OLTP {
}
//
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
public @interface RD {
}