添加生产者时存在不明确的依赖关系 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 定义本身提供的方法是相同的。

我想更大的问题是 - 你想用生产者方法做什么?