在java中,transient 是一个关键字,用于声明一个字段不会被序列化。
当一个对象被序列化时,被声明为 transient 的字段将不会被保存到序列化的结果中
主要用途:
敏感信息隐藏: transient 可以用于隐藏对象中的敏感信息,确保它们不会被持久化到存储设备或通过网络传输
临时数据: 有些字段在持久化时不需要被保存,比如缓存或临时计算的数据
注意事项:
transient 只能用于字段,不能用于类或方法
被声明为 transient 的字段在反序列化时会被设置为默认值,如 null(对于对象)、0(对于基本数据类型)或 false(对于布尔类型)
序列化过程中,transient 字段的内容不会被保存到序列化结果中
transient 只影响对象的序列化,不影响其它方面的行为,比如字段的访问权限等。
public class test { public static void main(string[] args) throws ioexception, classnotfoundexception { person person = new person("alice", "123456"); // 序列化对象 fileoutputstream fileoutputstream = new fileoutputstream("序列化对象.txt"); objectoutputstream out = new objectoutputstream(fileoutputstream); out.writeobject(person); out.close(); // 反序列化对象 objectinputstream in = new objectinputstream(new fileinputstream("序列化对象.txt")); person deserializedperson = (person) in.readobject(); in.close(); // 输出反序列化后的对象 // person{name='alice', password='null'} system.out.println(deserializedperson.tostring()); } }
在java的pojo中,@transient
注解的主要作用是标记某个字段不需要被持久化到数据库。具体来说:
与java transient
关键字的区别:
transient
关键字是java原生特性,用于标记字段在对象序列化时(如通过serializable
接口)应被忽略。
@transient
注解则是针对数据持久化的,仅影响orm框架的行为,不影响序列化。
注意:jpa默认也会忽略用transient
关键字修饰的字段,但显式使用@transient
注解更符合规范且可读性更强。
import javax.persistence.entity; import javax.persistence.transient; @entity public class user { private long id; private string username; private string password; @transient // 该字段不会保存到数据库 private string confirmpassword; // getters and setters }
总结:@transient
注解在pojo中用于标识字段无需持久化到数据库,常用于临时数据或避免orm框架的映射错误。注意区分它与java transient
关键字的不同应用场景。
到此这篇关于java 关键字transient与注解@transient的区别的文章就介绍到这了,更多相关java transient与注解@transient内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论