То, как ввести бобы от внешнего, освобождает с CDI?

Как я могу использовать 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

}
7
задан deamon 3 June 2010 в 14:33
поделиться

1 ответ

Используйте производителей:

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 {}

Если вам не нужно различать две реализации, пропустите часть квалификаторов.

8
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: