为什么在模型上实现Serializable接口?

6

我注意到在Spring Boot中,很多人创建模型/实体并实现Serializable接口。

public class ModelBase implements Serializable 

我理解序列化数据/类的含义,它可以让你保存一个类的状态(如果我没错的话,比如保存到文件中)。

但我认为这只有在必要时才应该这样做,但无论如何人们似乎只是倾向于实现接口。

那么这是否有不同的原因呢?


4
这是 JavaBean 的一个要求。 - Dioxin
1
启用序列化的一个常见原因是为了应用服务器中的会话。为了使Tomcat/另一个应用服务器能够存储或卸载内存中的会话(停用会话),任何在会话级别上的模型对象或Spring bean都需要是可序列化的。 - df778899
1
可能这个对你有帮助。 - Coder ACJHP
仍有许多框架(例如Java EE和Spring应用服务器)和规范(JavaBeans)要求编写的类使用JVM序列化工具。由于涉及几个安全问题,未来可能会减少对JVM序列化的强调。 - scottb
1个回答

3
当你的模型或实体需要在多个JVM之间传输时,你可能需要考虑实现Serializable接口。但是请谨慎使用。同时,你还应该为类提供有效的UUID以便在序列化和反序列化过程中使用。
示例:
private static final long serialVersionUID = 9178661439383356177L;

根据JPA规范:

如果一个实体实例需要作为一个分离的对象(例如通过远程接口)进行传递,则实体类必须实现Serializable接口。

同时:

当使用可序列化的值时,可以通过两种方式更改实体类来消除冗余:

使实体类可序列化,以便在值类的位置使用它。

将关键字段设置为瞬态,以便不会在记录中冗余存储。

https://docs.oracle.com/cd/E17277_02/html/collections/tutorial/SerializableEntity.html


"travel across several JVM's" 的意思是什么?它何时发生? - MTB
这个答案应该会更好地解答你的问题。 - Knight Rider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接