Как я могу использовать CDI JSR-299 для введения (не аннотируемый) бобов из внешних библиотек?
Примеры:
Взаимодействуйте через интерфейс X, и его реализации прибывают из стороннего lib. Как я могу решить который реализация использовать?
class A {
@Inject
private X x;
}
Что, если у меня было несколько классов с помощью этих X интерфейсных, но различных реализаций?
class A {
@Inject
private X x; // should be XDefaultImpl
}
class B {
@Inject
private X x; // should be XSpecialImpl
}
Используйте производителей:
public class ClassInABeanArchive {
@Produces @SpecialX public X createSpecialX() {
return new XSpecialImpl();
}
@Produces @DefaultX public X createDefaultX() {
return new XDefaultImpl();
}
}
Вам нужно будет определить квалификаторы @SpecialX
и @DefaultX
. и используйте их вместе с @Inject
:
@Qualifier
@Retention(..)
@Target(..)
public @interface SpecialX {}
Если вам не нужно различать две реализации, пропустите часть квалификаторов.