WELD-001409:带限定符@Default的DataProvider类型的模棱两可的依赖性

问题描述 投票:0回答:1

所有组件(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 {

}
java wildfly cdi weld
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.