java – 在CDI中较大范围的bean实例中注入的较短范围的Bean实例 – 它如何工作?

考虑以下请求范围的CDI bean:

@RequestScoped
public class RequestScopedBean {
    // ...
}

现在,我将它注入到一个应用范围的bean中:

@ApplicationScoped
public class ApplicationScopedBean {
    @Inject private RequestScopedBean requestScopedBean;
    // ...
}

我运行了这个代码,并注意到请求范围的bean实例在两个请求之间是不同的,但是应用程序范围的bean实例是相同的.我的怀疑是:这是如何工作的?请求范围的bean实例是否在每次请求时都归因于应用程序范围的字段?或者应用程序范围的bean的代理只是在请求之间进行更改?

最佳答案
在CDI中,每个注入的对象实际上是一个代理.那么在这种情况下,代理可能会保留对RequestContext的引用,并且每个方法调用都会获取正确的bean实例.

转载注明原文:java – 在CDI中较大范围的bean实例中注入的较短范围的Bean实例 – 它如何工作? - 代码日志