Я изучаю @Produces аннотацию инъекции зависимостей CDI от here. Я просто создал свой собственный пример. Тем не менее, я столкнулся с двусмысленной зависимостью.Неоднозначная зависимость при использовании аннотации @Produces
public interface Bank {
public void withdrawal();
public void deposit();
}
public class BankOfAmerica implements Bank {
@Override
public void withdrawal() {
System.out.println("Withdrawal from Bank of America");
}
@Override
public void deposit() {
System.out.println("Deposit to Bank of America");
}
}
public class BankFactory {
@Produces
public Bank createBank() {
return new BankOfAmerica();
}
}
И это класс, в который впрыскивается боб.
public class ProducesExample {
@Inject
private Bank bankOfAmerica;
public void callBanksWithdrawal() {
bankOfAmerica.withdrawal();
}
}
Я ценю за любую помощь.
EDIT: Я знаю, это своего рода дубликат этого question. Однако в учебнике, который я поделился, он говорит, что он должен работать. Более того, существует только один тип компонента, поэтому не нужно использовать @Default или @Alternatives, но все равно путайте, почему он не работает.
Спасибо за ваш ответ. Я просто пытаюсь понять. Поэтому в нашем контексте у меня есть компонент «BankOfAmerica» и еще один bean-компонент под названием «ProducesExample», который имеет метод производителя для Bank bean. Я ожидал бы, когда банк будет впрыскиваться, чтобы метод производителя был вызван и ввел компонент BankOfAmerica. Кроме того, нет никакой другой реализации для интерфейса банка. – quartaela