gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:27:53 26 4
gpt4 key购买 nike

如果我创建一个用 @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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com