【问题标题】:Why implement Serializable on models?为什么要在模型上实现 Serializable?
【发布时间】:2018-07-29 21:37:20
【问题描述】:

我注意到在 Spring-boot 中很多人创建模型/实体并实现 Serialiazable 接口。

public class ModelBase implements Serializable 

我了解序列化数据/类的含义,因为它使您能够保存类的状态(如果我没记错的话,例如保存到文件中)。

但我认为只有在必要时才应该这样做,但无论哪种方式,人们似乎都倾向于实现接口。

还有其他原因吗?

【问题讨论】:

  • 这是JavaBean的要求
  • 启用序列化的一个常见原因是应用服务器中的会话。为了使 Tomcat/另一个应用程序服务器能够从内存中存储或卸载会话(钝化会话),会话级别的任何模型对象或 Spring bean 都需要可序列化。
  • this帮助你。
  • 仍有许多框架(例如 Java EE 和 Spring 应用程序服务器)和规范 (JavaBeans) 要求编写的类使用 JVM 序列化工具。由于涉及到几个安全问题,JVM 序列化在未来可能不会受到重视。

标签: java spring spring-boot serialization deserialization


【解决方案1】:

当您的模型或实体要跨越多个 JVM 时,您可能需要考虑实现 Serializable 接口。您应该谨慎执行此操作。您还应该为要在序列化期间使用的类提供一个有效的 UUID,反之亦然。

样本是

private static final long serialVersionUID = 9178661439383356177L;

还有

根据 JPA 规范:

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

还有

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

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

使关键字段瞬态,因此它们不会冗余存储在记录中。

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

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2010-09-15
    • 2013-05-01
    • 2012-06-17
    • 2011-01-27
    • 2011-06-23
    • 1970-01-01
    • 2012-01-28
    • 2011-11-10
    相关资源
    最近更新 更多