一尘不染

范围较小的Bean实例注入了CDI中范围较大的Bean实例-它是如何工作的?

java

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

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

现在,我将其注入到应用程序范围的bean中:

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

我运行了这段代码,并注意到两个请求之间的请求范围的Bean实例是不同的,但应用程序范围的Bean实例是相同的。我的疑问是:这如何运作?在每个请求时,是否将请求范围的Bean实例重新分配给应用程序范围的字段?还是应用程序范围的bean的代理只是在请求之间改变?


阅读 200

收藏
2020-12-03

共1个答案

一尘不染

在CDI中,每个注入的对象实际上都是一个代理。因此,在那种情况下,代理可能持有对的引用,RequestContext并且在每个方法调用上都获得正确的bean实例。

2020-12-03