SSM 框架中的实体类为何不用实现 Serializable

什么是 Serializable 接口

Serializable是一个标记接口,没有方法或字段,仅用于标识可序列化的语义;标识了之后有什么用呢?官方的解释是:

Classes that do not implement this interface will not have any of their state serialized or deserialized. 不实现此接口的类将不会对其任何状态进行序列化或反序列化。

标识了Serializable后,JVM 就会负责对象的序列化和反序列化工作;所谓对象的序列化,就是将这个对象的状态转换成字节流,反序列化则是根据字节流,创建出一个完全相同的副本,一般应用于以下场景:

  1. 持久化存储
  2. 网络传输

SSM 框架与 Serializable 接口

在普通的 Web 项目中,SpringMVC 负责将 POJO 放在响应体并返回给客户端,但我们没有让 DTO 实现Serializable,这是因为它不需要在另一个 Java 应用中被重新创建。没错,传输的是字节流,但并不是从一个对象序列化得到的,而是通过 Getter 方法拿出字段的值并转换成 JSON 格式的字符串,再对字符串进行序列化,最后传输。接收一个 POJO 类型的参数也是相同的道理。

同样地,Mybatis 也是通过 Getter/Setter 方法,拿出字段的值,或赋值给字段,必要情况下进行类型转换。在关系型数据库中,虽然一个对象对应着一条记录,但实际持久化的是对象的某些字段的值,而不是对象本身。(不过对于 NoSql 数据库,由于没有与 Java 基本类型对应的数据结构,就需要将对象进行序列化)

个人见解,欢迎指正。

相关:
为什么要实现Serializable,君临-行者无界,博客园
你的JavaBean是否真的需要实现Serializable,He_quotes,博客园

posted @ 2020-03-09 21:21  逆风的小飞侠  阅读(1563)  评论(0编辑  收藏  举报