java - CDI 是否为 RequestScoped 重用代理?

标签 java jakarta-ee threadpool cdi proxies

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

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

我的问题是:如果新请求重用池中先前创建的线程,CDI 是否会重用我的 bean/服务先前创建的代理对象?

最佳答案

首先,了解客户端代理对象 != bean 实例(如果我们要遵循规范措辞,则为上下文实例)很重要。对于 @RequestScoped,总是为每个请求创建一个新的 bean 实例。但是,@RequestScoped 是一个普通范围,这意味着注入(inject)了一个客户端代理(并且这个代理委托(delegate)给 bean 实例)。

现在回到您对客户端代理对象的问题 - 该策略是特定于实现的。该规范指出,容器可以为每个 bean 实例化一个客户端代理对象,并在多个注入(inject)点之间共享它。但这不是必需的(另请参阅 this documentation )。引用实现(Weld、WildFly、GlassFish 等)确实共享 客户端代理对象。但同样,我们谈论的是客户端代理,而不是 bean 实例。

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

关于java - CDI 是否为 RequestScoped 重用代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711466/

相关文章:

multithreading - 线程安全的优先队列

java - 使用 Java 并发运行多线程任务,直到有足够的输出

java - 使用 eclipselink 和 java.sql 的 JPA : when connect to DB

java - 如何判断用户是否输入了字符串?

java - Weblogic:在 ejb-jar 文件中找不到 EJB

java - Java EE 和 J2EE 有什么区别?

带有 ThreadPool 的 Java Web 服务器没有响应

java - 将自定义类和 JSP 添加到现有的第三方 Java Web 应用程序

java - 奇怪的 wav 文件。我可以使用什么过滤器?

java - 将 Spring 安全与 JSF 2 集成