Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要在模型上实现序列化?_Java_Spring_Spring Boot_Serialization_Deserialization - Fatal编程技术网

Java 为什么要在模型上实现序列化?

Java 为什么要在模型上实现序列化?,java,spring,spring-boot,serialization,deserialization,Java,Spring,Spring Boot,Serialization,Deserialization,我注意到在SpringBoot中,很多人创建模型/实体并实现可序列化的接口 public class ModelBase implements Serializable 我理解序列化数据/类意味着什么,因为它使您能够保存类的状态(如果我没有错的话,比如保存到文件中) 但我认为这应该只在必要时进行,但不管怎样,人们似乎只是倾向于实现接口 是否有一个不同的原因?当你的模型或实体打算穿越几个JVM时,你可能想考虑实现可串行化的接口。你应该谨慎行事。您还应该为序列化期间要使用的类提供有效的UUID,

我注意到在SpringBoot中,很多人创建模型/实体并实现可序列化的接口

public class ModelBase implements Serializable 
我理解序列化数据/类意味着什么,因为它使您能够保存类的状态(如果我没有错的话,比如保存到文件中)

但我认为这应该只在必要时进行,但不管怎样,人们似乎只是倾向于实现接口


是否有一个不同的原因?

当你的模型或实体打算穿越几个JVM时,你可能想考虑实现可串行化的接口。你应该谨慎行事。您还应该为序列化期间要使用的类提供有效的UUID,反之亦然

样本是

private static final long serialVersionUID = 9178661439383356177L;

根据JPA规范:

如果要将实体实例作为分离对象按值传递(例如,通过远程接口),则实体类必须实现可序列化接口

public class ModelBase implements Serializable 

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

使实体类可序列化,以便可以用它代替值类

使关键字段变为临时字段,这样它们就不会冗余地存储在记录中


要启用序列化,一个常见的原因是需要在应用程序服务器中的会话。为了让Tomcat/另一个应用服务器能够从内存中存储或卸载会话(钝化会话),会话级别的任何模型对象或SpringBean都需要可序列化。这可能会对您有所帮助。仍然有许多框架(例如Java EE和Spring应用服务器)和规范(JavaBeans)这要求编写的类使用JVM序列化功能。由于JVM序列化带来的几个安全问题,今后可能不会那么强调它。