为什么 bean class 应该被序列化
Why bean class should be serialized
为什么要序列化 bean 类?
我在关于 spring MVC 的帖子中看到了 bean 类,它们总是被声明为序列化的并且有一个 private static final long serialVersionUID
。为什么?
根据 JavaBean specification bean 应该被序列化。实际上,任何 Java class 都可以是一个 bean,如果它具有以下属性:
- 有一个无参数构造函数
- 有一些私有成员 access/manipulate 他们有一些 getter/setter
- 实施
serializable
参见 bean 的 wikipedia 定义。所以根据定义,它们是可序列化的。
并且 serialVersionUID
用作 Serializable
class 的通用版本标识符。在反序列化过程开始时 class 被序列化之后,此数字用于确保加载的 class 与该序列化对象完全对应。
关于 servlet 的一个很好的理由是,如果您将可序列化的 bean 放入您的 Web 服务器会话中,您的 Web 服务器可以在关闭时将它们序列化到磁盘,然后在启动时将它们反序列化回内存向上。这样,当服务器恢复时,用户不会丢失他们的会话/登录。
如果会话中有任何不可序列化的 bean,tomcat 将无法将会话序列化到磁盘。
我相信如果你想在集群中的多个服务器之间同步会话也是必要的。
为什么要序列化 bean 类?
我在关于 spring MVC 的帖子中看到了 bean 类,它们总是被声明为序列化的并且有一个 private static final long serialVersionUID
。为什么?
根据 JavaBean specification bean 应该被序列化。实际上,任何 Java class 都可以是一个 bean,如果它具有以下属性:
- 有一个无参数构造函数
- 有一些私有成员 access/manipulate 他们有一些 getter/setter
- 实施
serializable
参见 bean 的 wikipedia 定义。所以根据定义,它们是可序列化的。
并且 serialVersionUID
用作 Serializable
class 的通用版本标识符。在反序列化过程开始时 class 被序列化之后,此数字用于确保加载的 class 与该序列化对象完全对应。
关于 servlet 的一个很好的理由是,如果您将可序列化的 bean 放入您的 Web 服务器会话中,您的 Web 服务器可以在关闭时将它们序列化到磁盘,然后在启动时将它们反序列化回内存向上。这样,当服务器恢复时,用户不会丢失他们的会话/登录。
如果会话中有任何不可序列化的 bean,tomcat 将无法将会话序列化到磁盘。
我相信如果你想在集群中的多个服务器之间同步会话也是必要的。