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