¿Cómo inyectar frijoles de libs externos con CDI?
-
24-10-2019 - |
Pregunta
¿Cómo puedo usar JSR-299 CDI para inyectar frijoles (no anotados) de bibliotecas externas?
Ejemplos:
La interfaz X y sus implementaciones provienen de un tercero lib. ¿Cómo puedo decidir qué implementación usar?
class A {
@Inject
private X x;
}
¿Qué pasaría si tuviera varias clases usando la interfaz X pero implementaciones diferentes?
class A {
@Inject
private X x; // should be XDefaultImpl
}
class B {
@Inject
private X x; // should be XSpecialImpl
}
Solución
Use productores:
public class ClassInABeanArchive {
@Produces @SpecialX public X createSpecialX() {
return new XSpecialImpl();
}
@Produces @DefaultX public X createDefaultX() {
return new XDefaultImpl();
}
}
Tendrás que definir el @SpecialX
y @DefaultX
calificadores. y úsalos junto con @Inject
:
@Qualifier
@Retention(..)
@Target(..)
public @interface SpecialX {}
Si no necesita diferenciar dos implementaciones, omita la parte de calificadores.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow