添加生产者时存在不明确的依赖关系 class
Ambiguous dependencies when I added a producer class
我是reading/testing以下关于 CDI 的教程:[link]。
我在代码中添加生产者 class 时出现异常。
基本上,有一个带有默认实现的接口:
public interface ATMTransport {
public void communicateWithBank(byte[] datapacket);
}
@Default
public class StandardAtmTransport implements ATMTransport {
public void communicateWithBank(byte[] datapacket) {
System.out.println("communicating with bank via Standard transport");
}
}
接下来,还有另一个 class 注入 ATMTransport 接口:
@Named("atm")
public class AutomatedTellerMachineImpl implements AutomatedTellerMachine {
@Inject
private ATMTransport transport;
public void deposit(BigDecimal bd) {
transport.communicateWithBank(null);
}
}
到目前为止一切正常。所以在关于 'producers' 的部分中,他们显示了一个新的 class:
public class TransportFactory {
@Produces ATMTransport createTransport() {
System.out.println("ATMTransport created with producer");
return new StandardAtmTransport();
}
}
然后,通过添加生产者 class 我得到了这个异常:
WELD-001409: Ambiguous dependencies for type ATMTransport with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private AutomatedTellerMachineImpl.transport at AutomatedTellerMachineImpl.transport(AutomatedTellerMachineImpl.java:0)
Possible dependencies:
- Managed Bean [class StandardAtmTransport] with qualifiers [@Default @Any],
- Producer Method [ATMTransport] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces TransportFactory.createTransport()]
我使用限定符解决了这个问题,但我真的不知道为什么。
我的问题是,为什么生产者 class 会导致该异常? (他们在教程中没有提及任何相关内容)。
我真的需要一点解释。
根据您提供的代码,您最终创建了 ATMTransport
的默认实现,它是一个托管 bean。异常是由于两个 bean 可用于相同的注入目标而引起的。 @Default
是添加到所有 CDI bean 的限定符。基本上,不需要 producer 方法,因为 class 定义本身提供的方法是相同的。
我想更大的问题是 - 你想用生产者方法做什么?
我是reading/testing以下关于 CDI 的教程:[link]。
我在代码中添加生产者 class 时出现异常。
基本上,有一个带有默认实现的接口:
public interface ATMTransport {
public void communicateWithBank(byte[] datapacket);
}
@Default
public class StandardAtmTransport implements ATMTransport {
public void communicateWithBank(byte[] datapacket) {
System.out.println("communicating with bank via Standard transport");
}
}
接下来,还有另一个 class 注入 ATMTransport 接口:
@Named("atm")
public class AutomatedTellerMachineImpl implements AutomatedTellerMachine {
@Inject
private ATMTransport transport;
public void deposit(BigDecimal bd) {
transport.communicateWithBank(null);
}
}
到目前为止一切正常。所以在关于 'producers' 的部分中,他们显示了一个新的 class:
public class TransportFactory {
@Produces ATMTransport createTransport() {
System.out.println("ATMTransport created with producer");
return new StandardAtmTransport();
}
}
然后,通过添加生产者 class 我得到了这个异常:
WELD-001409: Ambiguous dependencies for type ATMTransport with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private AutomatedTellerMachineImpl.transport at AutomatedTellerMachineImpl.transport(AutomatedTellerMachineImpl.java:0)
Possible dependencies:
- Managed Bean [class StandardAtmTransport] with qualifiers [@Default @Any],
- Producer Method [ATMTransport] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces TransportFactory.createTransport()]
我使用限定符解决了这个问题,但我真的不知道为什么。
我的问题是,为什么生产者 class 会导致该异常? (他们在教程中没有提及任何相关内容)。
我真的需要一点解释。
根据您提供的代码,您最终创建了 ATMTransport
的默认实现,它是一个托管 bean。异常是由于两个 bean 可用于相同的注入目标而引起的。 @Default
是添加到所有 CDI bean 的限定符。基本上,不需要 producer 方法,因为 class 定义本身提供的方法是相同的。
我想更大的问题是 - 你想用生产者方法做什么?