java - tutorial - ¿El ámbito de @Dependent no está predeterminado en Wildfly?
java dependency injection example (1)
Tengo algunos problemas para inyectar POJO a través de @Inject usando Wildfly. La documentación establece claramente:
@Dependent: el alcance predeterminado si no se especifica ninguno; significa que existe un objeto para servir exactamente un cliente (bean) y tiene el mismo ciclo de vida que ese cliente (bean).
Sin embargo, cuando tengo dos clases:
@Singleton
@Startup
public class A{
@Inject
private B b;
}
public class B{
public B(){}
}
Sigo recibiendo:
Dependencias insatisfechas para el tipo B con calificadores @Default en el punto de inyección [BackedAnnotatedField] @Inject [...]
Cuando agrego @Dependent todo funciona como un amuleto. ¿Me estoy perdiendo de algo? ¿Es este comportamiento específico de la mosca del bosque? Espero que puedas ayudar, gracias.
Cuando se usa CDI en Java EE 7 (CDI 1.1), el modo predeterminado de descubrimiento de bean está annotated
. Lo que significa que cualquier bean con un alcance explícitamente especificado está disponible para inyección.
Entonces, para que su frijol B esté disponible para inyección, puede:
- Declara un alcance explícito en la clase B (eso es lo que estás haciendo al poner
@Dependent
) - Declare un archivo
beans.xml
con el atributobean-discovery-mode
establecido enall
. Esto hará que todos los beans de su archivo estén disponibles para inyección (el mismo comportamiento que Java EE 6 (CDI 1.0)).
El archivo beans.xml
debe estar en la carpeta META-INF
y se ve así:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1"
bean-discovery-mode="all">
</beans>
Sin embargo, no recomendaría usar bean-discovery-mode="all"
.