我不明白序列化在 session 范围的 JSF 托管 bean 中是如何工作的。为什么在创建 session 范围的 JSF 托管 bean 时实现 Serializable
接口(interface)很重要?
最佳答案
@SessionScoped
bean 最终存储在用户的 HTTP session 中。
这意味着当 Java EE 部署实现 session 保留方案时(例如,tomcat 将尝试在服务器关闭时将当前 session 保存到 .ser 文件,if 部署者如此选择),这些 session 范围的 bean 也将成为将被持久化的有效负载的一部分。
一个不可序列化的 session 范围的 bean 在这里成为一个问题,因为它呈现了它所属的整个 HTTP session ,不可持久(任何尝试序列化包含不可序列化成员的对象都会导致 NotSerializableException
,除了一些特殊处理)
顺便说一句,这意味着即使您的 session 范围 bean 实现了 Serializable,它的所有成员变量也必须是可序列化的或标记为 transient
。
简而言之,可能通过序列化持久化的给定 HTTP session 的整个对象图必须标记为可序列化或 transient
阅读更多:
关于jsf - 创建 session 范围托管 bean 时可序列化接口(interface)的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24985593/