SSM 框架中的实体类为何不用实现 Serializable
什么是 Serializable 接口
Serializable
是一个标记接口,没有方法或字段,仅用于标识可序列化的语义;标识了之后有什么用呢?官方的解释是:
Classes that do not implement this interface will not have any of their state serialized or deserialized. 不实现此接口的类将不会对其任何状态进行序列化或反序列化。
标识了Serializable
后,JVM 就会负责对象的序列化和反序列化工作;所谓对象的序列化,就是将这个对象的状态转换成字节流,反序列化则是根据字节流,创建出一个完全相同的副本,一般应用于以下场景:
- 持久化存储
- 网络传输
SSM 框架与 Serializable 接口
在普通的 Web 项目中,SpringMVC 负责将 POJO 放在响应体并返回给客户端,但我们没有让 DTO 实现Serializable
,这是因为它不需要在另一个 Java 应用中被重新创建。没错,传输的是字节流,但并不是从一个对象序列化得到的,而是通过 Getter 方法拿出字段的值并转换成 JSON 格式的字符串,再对字符串进行序列化,最后传输。接收一个 POJO 类型的参数也是相同的道理。
同样地,Mybatis 也是通过 Getter/Setter
方法,拿出字段的值,或赋值给字段,必要情况下进行类型转换。在关系型数据库中,虽然一个对象对应着一条记录,但实际持久化的是对象的某些字段的值,而不是对象本身。(不过对于 NoSql 数据库,由于没有与 Java 基本类型对应的数据结构,就需要将对象进行序列化)
个人见解,欢迎指正。
相关:
为什么要实现Serializable,君临-行者无界,博客园
你的JavaBean是否真的需要实现Serializable,He_quotes,博客园