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,博客園


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM