gpt4 book ai didi

java - @ApplicationScoped 必须是可序列化的?

转载 作者:行者123 更新时间:2023-11-30 02:31:05 24 4
gpt4 key购买 nike

我现在正在了解 Java EE 7 tutorial 中的 CDI 范围并发现在最后一段中写着

Beans that use session, application, or conversation scope must be serializable, but beans that use request scope do not have to be serializable.

但是让我很困惑的是,在我的 IDE(Netbeans 和 IntelliJ Idea)中,当我使用 @SessionScoped 或 @ConversationScoped 时,如果我没有像 Java EE 7 那样实现可序列化,它确实会给我一个错误教程已经说过,显然,我无法构建项目然后运行它。当我使用 @ApplicationScoped 但没有实现 Serialized 时,事情变得很奇怪,没有错误出现,我可以正常构建然后运行应用程序。

所以我对此很好奇,也很想知道为什么。您能解释一下那里发生了什么吗?非常感谢!

最佳答案

您的 IDE 中显示的错误基本上是因为您的 IDE 有一些用于此目的的插件(顺便说一句,这不是 100% 可信的)。

序列化的原因如下:

  • @SessionScoped bean

    • 这些不仅仅由 CDI 规范处理,其他规范也对其有要求
    • 即,容器可以选择存储钝化 session 以保护资源
    • 另一个故事是服务器之间的复制,以便您的请求可以在多个节点上处理(故障转移场景等)
    • 我们不知道为什么,但正因为如此,我们必须确保这些 Bean 始终可序列化
  • @ConversationScoped bean

    • 几乎相同的故事,不是其他规范会对它们有要求,而是这些 bean 在 session 范围内“存活”,并且可以与 session 一样长地存活(如果不早点结束)
    • 由于这些原因,当服务器钝化/复制 session 以及 session 范围的 Bean 时,它当然也必须钝化/复制 session 范围的 Bean
  • @ApplicationScoped bean

    • 这些确实应该是可序列化的,但在某些情况下,即使它们不能序列化,您的应用程序也能运行
    • 这些情况是您可以避免序列化的情况,例如在单节点应用程序服务器上运行
    • 一旦您需要将此类 bean 复制到多个节点,您也需要它可序列化
    • 另一种可以省略可序列化性的情况是在 SE 中
    • 因此,您的 IDE 非常智能,并且不需要 Serialized 存在

关于java - @ApplicationScoped 必须是可序列化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265908/

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