@ApplicationScoped 必须是可序列化的? [复制]

2024-01-02

我现在正在了解 CDI 范围Java EE 7 教程 https://docs.oracle.com/javaee/7/tutorial/cdi-basic008.htm#GJBBK发现最后一段说

使用会话、应用程序或对话范围的 Bean 必须是可序列化的,但使用请求范围的 Bean 不必是可序列化的。

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

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


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

序列化的原因如下:

  • @SessionScoped beans

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

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

    • 这些确实should可以序列化,但在某些情况下,即使它们不是可序列化的,您的应用程序也可以运行
    • 这些情况是您可以避免序列化的情况,例如运行在单节点应用服务器上
    • 一旦您需要将此类 bean 复制到多个节点,您也需要它是可序列化的
    • 另一种可以省略可串行性的情况是在 SE 中
    • 因此,您的 IDE 是智能的,不会强制要求Serializable在场
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@ApplicationScoped 必须是可序列化的? [复制] 的相关文章

  • Java SFTP使用JSch上传,但如何覆盖当前文件?

    我正在尝试使用 JSch 通过 SFTP 将两个文件上传到服务器 如果目录为空 则上传文件效果很好 但我想一遍又一遍地上传相同的文件 只需更改内部的 id 但我不知道如何执行此操作 JSch 中有一些名为 OVERWRITE 的静态参数 但
  • 识别包含本机方法实现的库文件/源

    如何识别包含本机方法实现的库文件 Ex public native String intern 我在哪里可以找到实施 source code of String intern 方法 找到了答案String intern 与快速谷歌搜索 ht
  • Java Reflection:为什么这么慢?

    我一直避免使用 Java 反射 因为它速度缓慢 我在当前项目的设计中达到了一个点 能够使用它将使我的代码更具可读性和优雅性 所以我决定尝试一下 我只是对这种差异感到惊讶 我注意到有时运行时间几乎延长了 100 倍 即使在这个简单的例子中 它
  • 方法中缺少 return 语句错误

    我正在尝试编写一个返回计算机 MAC 地址字符串的静态方法 该函数本身可以在此处找到 http www mkyong com java how to get mac address in java http www mkyong com j
  • allure2 侦听器在控制台中输出步骤

    我正在使用 Allure2 和 TestNG 我想编写自己的侦听器 在控制台输出中打印 Steps 我在 allure 中看到了 StepLifecycleListener 接口 但我无法在 TestNg 中实现此侦听器 有什么指点吗 Ov
  • 在 Ubuntu 上的 Tomcat 中加载共享本机库

    如何在 Ubuntu 上的 Tomcat6 中加载共享库 我创建了一个名为 libawragrids so 的库 awragrids 并将其放置在 var lib tomcat6 shared 我在调用启动 tomcat 的终端中设置了以下
  • Java:当计时器处于活动状态时,JSplitPane 将顶部面板的内容复制到底部面板

    所以我有一个 JSplitPane 和两个 JPanel 一个在顶部 一个在底部 在这两个面板中 我重写了paintComponent方法并添加了我自己的图形 在底部面板中 我想添加动画 当面板不重新绘制时 这很好 但是一旦计时器 java
  • 如何处理JFreeChart中的SpiderWebPlot?

    发现 JFreeChart 我在使用时遇到了问题蜘蛛网情节 http www jfree org jfreechart api javadoc org jfree chart plot SpiderWebPlot html 这就是我今天所拥
  • Java中ThreadFactory的使用

    有人可以简要解释一下如何以及何时使用 ThreadFactory 吗 使用和不使用 ThreadFactory 的示例可能确实有助于理解差异 Thanks 这是一种可能的用法 假设您有一个ExecutorService它执行你的Runnab
  • 更改活动布局

    在我的应用程序中 我想更改 Activitycontentview例如 如果单击按钮 一开始我称第一个布局为 public void onCreate Bundle savedInstanceState super onCreate sav
  • 正确使用 Facelet 模板和复合组件

    我仍然不确定 JSF 模板和复合组件的正确使用 我需要创建一个企业 Web 应用程序 其中会有很多页面 每个页面都将具有相同的页眉 菜单 页脚 当然还有不同的内容 JSF 模板 每个页面上的内容将由可重用的 盒子 JSF 复合组件 组成 这
  • 如何设置JOptionPane的位置

    我正在创建这个JOptionPane JOptionPane showMessageDialog this File was saved Save JOptionPane INFORMATION MESSAGE 但我的 JFrame 很大
  • 如果在代理模式中我们有接口而不是代理类中实际的具体主题,那么它相当于装饰模式

    代理模式在进行一些额外的处理后将请求委托给真实主体 例如根据某些凭据检查应用检查是否需要处理请求 它的类图如下 代理类具有对具体主题的直接引用 装饰器模式丰富了组件的行为 像代理一样 它也做了一些额外的处理并将操作委托给真正的组件 该模式的
  • 实例化新类时,代理后面的 Java 小程序遇到暂时冻结

    介绍 我们客户办公室的 Java 小程序存在一些问题 该小程序旨在通过定期截屏来记录屏幕 它已签名 并且应该以提升的权限运行 我们遇到的问题是 Java 小程序有时可能根本无法启动 如果 Java 控制台出现 它可能很快就会消失 感觉好像整
  • 如何在触摸屏幕时播放声音? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试制作一款类似飞翔的小鸟的游戏 然而 我正在努力寻找一种在触摸屏幕时播放流行声音的方法 我希望它在每次触摸屏幕时播放声音 我是
  • Spring中的顺序依赖注入是什么?

    我有一个关于 spring 依赖注入的问题 我需要知道依赖项是否按照在 XML 中声明的顺序注入 或者 没有这样的命令 例子
  • 如何更快地渲染我的数组?

    我一直在研究一个nonogram https en wikipedia org wiki NonogramJava 中的求解器 我的所有算法都运行良好 但我在可视化方面遇到了一些困难 在算法执行期间 我可以访问两个 解决方案数组 一种是类型
  • 相当于休眠@Index? [复制]

    这个问题在这里已经有答案了 休眠注释 Index已弃用 但我找不到文档或任何如何交换它的提示 Entity class MyEntity Index name name org hibernate annotations Index pri
  • 如何使用 gradle 从 WSDL 和 XSD 生成类,相当于 maven-jaxb2-plugin

    我想将 Maven2 构建文件切换到 gradle 使用 gradle 从 WSDL XSD 生成 java 类似乎没有进一步记录 没有相应的 gradle 插件 我在 Maven 中使用以下配置并搜索 gradle 的等效项
  • 我们可以在 Eclipse 中从我们的项目中调用另一个项目 java 类吗

    import public class TriggerJob String jobStatus SchedulerMetaData metaData null public void rightNow HashMap ParamMap An

随机推荐