关于序列化:JSF Web应用程序中的哪些类需要Serializable?

Which classes in a JSF web application need to be Serializable?

问题JSF控制器、服务和DAO中的User类是否需要序列化?


一旦服务器抛出java.io.NotSerializableException之后,类名就会出现在异常消息中。服务器希望类是serializable,这已经足够了。

通常情况下,这些类(in)直接结束在HttpSession中,因为服务器可能需要将所有HttpSession实例转换(序列化)为InputStream/byte[]实例,因此它们可以保存到本地磁盘文件系统,以便在重新启动时记住打开的会话,或者在集群中时通过网络传输。

在JSF(+CDI)Web应用程序中,所有@ViewScoped@FlowScoped@ConversationScoped@SessionScopedbean将(in)直接保存在HttpSession中。因此,很明显,至少那些bean及其所有属性都需要是serializable

对于一般的设计实践,在代码库中归类为"Java bean"的任何东西都需要实现EDCOX1〔0〕。这甚至在JavaBeans规范中提到。只有当涉及到@RequestScoped@ApplicationScopedbean时,才会主动使用它,这就是为什么大多数开发人员只是从这些bean中省略了它们。从另一方面来说,java.io.NotSerializableException可能是一个很好的提示,它可以防止开发人员/维护人员在"错误"的范围内(而不是支持bean最初设计的范围内)重新使用支持bean。

另请参见:

  • java.io.WriteAbortedException:写入中止;java.io.NotSerializableException
  • JavaBean到底是什么?

JSF应用程序中的每个类都必须实现serializable接口。

如果要重写此项,请使用transient关键字跳过不可序列化类的序列化。

其他信息:

  • 对象的序列化说明:

It lets you take an object or group of objects, put them on a disk or send them through a wire or wireless transport mechanism, then
later, perhaps on another computer, reverse the process: resurrect the
original object(s). The basic mechanisms are to flatten object(s) into
a one-dimensional stream of bits, and to turn that stream of bits back
into the original object(s).

Like the Transporter on Star Trek, it's all about taking something complicated and turning it into a flat sequence of 1s and 0s, then
taking that sequence of 1s and 0s (possibly at another place, possibly
at another time) and reconstructing the original complicated
"something."

isocpp.org(Serialization and Unserialization)

  • 瞬态变量的用途是什么?