CDI是否重用RequestScoped的代理?

And*_*niy 1 java java-ee threadpool proxies cdi

如果我创建一个带注释的bean,@RequestScoped我希望它会为每个新请求实例化一个新的代理实例.

另一方面,每个请求都与其自己的线程相关联.

我的问题是:如果新请求重用以前从池中创建的线程,CDI会重用以前创建的bean/service的代理对象吗?

Mar*_*uba 5

首先,理解客户端代理对象!= bean实例(或者如果我们想要遵循规范措辞的上下文实例)是很重要的.对于@RequestScoped每个请求始终创建一个新的bean实例.但是,这@RequestScoped是一个正常的范围,这意味着注入了一个客户端代理(并且此代理委托给bean实例).

现在回到客户代理对象的问题 - 策略是特定于实现的.该规范声明容器可以为每个bean实例化一个客户端代理对象,并在多个注入点之间共享它.但它不是必需的(另见本文档).参考实现(Weld,WildFly,GlassFish等)DOES共享客户端代理对象.但同样,我们谈论的是客户端代理,而不是bean实例.

WRT线程关联 - 请求上下文与一个线程相关联,但是当请求结束时,上下文被销毁(包括所有bean实例)并且线程被解除.