injection - qualifier java ee
Ejemplo de frijol de un alcance más corto inyectado en una instancia de frijol de un alcance mayor en CDI: ¿cómo funciona? (1)
Considere el siguiente bean CDI con ámbito de solicitud:
@RequestScoped
public class RequestScopedBean {
// ...
}
Ahora, lo inyecto en un bean con ámbito de aplicación:
@ApplicationScoped
public class ApplicationScopedBean {
@Inject private RequestScopedBean requestScopedBean;
// ...
}
Ejecuté este código y observé que la instancia del bean con ámbito de solicitud es diferente entre dos solicitudes, pero la instancia del bean del ámbito de la aplicación es la misma. Mi duda es: ¿cómo funciona esto? ¿Se vuelve a atribuir la instancia de bean con ámbito de solicitud al campo con ámbito de aplicación en cada solicitud? ¿O el proxy del bean con ámbito de aplicación simplemente cambia entre las solicitudes?
En CDI, cada objeto inyectado es en realidad un proxy. Entonces, en ese caso, el proxy probablemente contiene una referencia al RequestContext
y en cada invocación de método obtiene la instancia de bean correcta.