Я изучаю Java EE CDI, инъекцию зависимостей и, в частности, @Produces
. Мне интересно, почему в методе getGreedingCard()
ему вообще нужна аннотация @Produces
, так как два класса GreetingCardImpl
и AnotherGreetingCardImpl
уже импортированы в пространство. Это похоже на обычную зависимость от пакета/класса, и простой импорт решает проблему. Зачем нужна инъекция зависимостей через аннотацию @producer
?@ АннотацииProducer в Java EE
Благодарим за разъяснения.
public interface GreetingCard {
void sayHello();
}
public class GreetingCardImpl implements GreetingCard {
public void sayHello() {
System.out.println("Hello!!!");
}
}
public class AnotherGreetingCardImpl implements GreetingCard {
public void sayHello() {
System.out.println("Have a nice day!!!");
}
}
import com.javacodegeeks.snippets.enterprise.cdibeans.impl.AnotherGreetingCardImpl;
import com.javacodegeeks.snippets.enterprise.cdibeans.impl.GreetingCardImpl;
@SessionScoped
public class GreetingCardFactory implements Serializable {
private GreetingType greetingType;
@Produces
public GreetingCard getGreetingCard() {
switch (greetingType) {
case HELLO:
return new GreetingCardImpl();
case ANOTHER_HI:
return new AnotherGreetingCardImpl();
default:
return new GreetingCardImpl();
}
}
}
Вы протестировали это? Поскольку вы должны иметь AmbiguousResolutionException, поскольку GreetingCard может быть создана в 3-х местах (2 класса и метод продюсера). См. Эту ссылку о проблемах, связанных с продуктами http://stackoverflow.com/q/22982422/3701228 – Gas