gpt4 book ai didi

jakarta-ee - 不同的 bean 作用域如何在服务器上工作?

转载 作者:行者123 更新时间:2023-12-04 12:42:36 24 4
gpt4 key购买 nike

我想知道如何在 CDI( @ApplicationScoped@SessionScoped@RequestScoped )中应用不同的 bean 范围。我了解生命周期,但是这些存储在容器中的哪个位置?我在 JSF bean 上使用这些注释。

这些 bean 如何存储在服务器上,服务器如何知道哪些 bean 属于谁。

例如,一个 bean 具有 @SessionScoped存储在 HTTPSession幕后的对象?是 bean 用@ApplicationScoped存储在 ServletContext 中的 map 实例变量中?如果是这样,那么线程安全呢?我想我误解了它,但如果有人能教我发生了什么,它们的存储位置(不同的范围),服务器如何能够知道哪些 bean 属于谁……就像还有其他 id 一样,那就太好了(不仅是 session ID)?

顺便说一句,我使用 Java EE 6 所有引用实现。

最佳答案

For example is a bean that has an @SessionScoped stored in the HTTPSession object behind the scenes? Are beans with @ApplicationScoped stored in a map instance variable in the ServletContext?



对于 web 层,确实是这样。如果 bean 已被实例化,您通常可以通过手动迭代所述映射中的所有对象来找到它。
@RequestScoped虽然是一件特别的事情。在 web 层,这对应于请求属性映射,但这个范围也适用于调用,例如远程 session bean,或消息驱动 bean 处理消息。在这种情况下,没有 http 请求,因此没有请求属性映射。这些很可能存储在“其他地方”,可能存储在由 bean 代理设置和取消设置的 TLS(线程本地存储)中。

If so, what about thread safety.



应用程序和 session 范围的 bean 本身根本就不是线程安全的。 必须注意线程安全,例如通过使用线程安全数据结构、synchronized 关键字或本质上线程安全的 bean 类型(如带有 @Stateful 注释的 bean)。

关于jakarta-ee - 不同的 bean 作用域如何在服务器上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10143577/

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