在java语言种,transient关键字用于标记在序列化过程中某变量不需要持久化到磁盘里。但是有几点需要注意:
- transient只作用于实现Serializable的序列化,不适用于实现Externalizable
- 不管有没有transient修饰,静态变量static都不能被序列化(Serializable的序列化)
- 经验证阿里的fastjson默认也是不会序列化transient修饰的变量,但是会序列化静态变量
底层原理(引用别的博客的一句总结):
serialization就是把对象的状态存储到硬盘上去,等需要的时候就可以再把它读出来使用。有些时候像银行卡号这些字段是不希望在网络上传输的,transient的作用就是把这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化,意思是transient修饰的age字段,他的生命周期仅仅在内存中,不会被写到磁盘中。
场景应用:
对于系统中需要脱敏的字段用transient修饰最好不过了,在打印日志时大部分习惯使用fastJson序列化。这样像一些敏感的字段就不会打印到日志里(比如:用户明文密码,卡号全明文,cvv等信息)