创建会话范围的托管bean时Serializable接口的重要性

wel*_*ino 2 session jsf serialization managed-bean jsf-2.2

我无法理解序列化在会话范围的JSF托管bean中是如何工作的.为什么Serializable在创建会话范围的JSF托管bean时接口的实现很重要?

kol*_*sus 5

@SessionScoped bean最终存储在用户的HTTP会话中.

这意味着,当一个Java EE部署实现了一个会话保留方案(例如,tomcat会尝试将当前会话保存到.ser在服务器关闭的文件,如果部署者选择这样做),这些会话范围豆也将成为其中的一部分将持久的有效负载.

会话范围的bean,是不是序列化,因为它使整个HTTP会话,它是未持久化(任何试图序列包含一个不可序列化的成员将导致一个对象的一部分这里成为一个问题NotSerializableException,除了一些特殊处理)

顺便说一句,这意味着即使您的会话范围的bean实现了Serializable,它的所有成员变量也必须是可序列化的或被标记的transient.

简而言之,易于通过序列化持久化的给定HTTP会话的整个对象图必须标记为可序列化或 transient

阅读更多: