Как вводить бобы из внешних LIBS с CDI?
-
24-10-2019 - |
Вопрос
Как я могу использовать JSR-299 CDI для инъекции (не аннотированных) бобов из внешних библиотек?
Примеры:
Интерфейс 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 {}
Если вам не нужно дифференцировать две реализации, пропустите часть квалификаторов.
Не связан с StackOverflow