序列化和lombok
序列化-将java对象转换为字节对象
Serializable实现
dubbo服务在调⽤的时候,传输的实体必须要实现序列化
java.lang.IllegalStateException: Serialized class k.provider.dubbo.dto.Person
must implement java.io.Serializable
transient关键字修饰的属性,会⽤默认值,不会被序列化。
如果⽗类实现了Serializable接⼝,⼦类没有实现Serializable接⼝,那么⼦类可以正常序列化。
如果⼦类实现了Serializable接⼝,⽽⽗类没有实现Serializable接⼝,那么必须满⾜如下条件⼦类才能正常序列化,
第⼀:⽗类必须提供⼀个公共的⽆参默认构造函数
使⽤gson时,没有⽆参构造也可以
Externalizable实现
需要序列化的对象必须有⽆参构造
需⾃⾏实现每个属性的序列化规则
静态属性不能被序列化,只会只⽤默认值
反序列化-将字节对象转换为java对象
dubbo传输实体⽆⽆参构造⽅法,也可以调⽤成功。
ObjectInputStream也可以成功,见⿁了吧~
⼀些常⽤的序列化⼯具
xml
json
protobuff
avro
lombok
注解在类上
@Data
提供get set equals canEqual hashCode toStrings⼀个6个⽅法
@Setter
所有属性的setter⽅法
@Getter
所有属性的getter⽅法
@ToString
⽣成toString⽅法
@Value
提供get equals hashCode toStrings⼀个4个⽅法
@
@Log4j
名为log的Log4j对象
@Log4j2
名为log的Log4j2 对象
@Slf4j
名为log的Slf4j 对象
@AllArgsConstructor
提供全参构造⽅法,使⽤此⽅法后,默认的构造⽅法(⽆参构造)将不再提供。@NoArgsConstructor
提供⽆参构造⽅法。
@EqualsAndHashCode
提供equals canEqual hashCode⽅法
@Builder
只使⽤@Builder会⾃动创建全参构造器。默认
⽽添加上@NoArgsConstructor后就不会⾃动产⽣全参构造器
反序列化需要DTO实现⽆参构造⽅法
注解在属性上
@NonNulljava接口有没有构造方法
属性不能为空,且默认有该属性的构造⽅法,⽆⽆参构造。
注解在变量上
@CleanUp
调⽤变量的close()⽅法。
注解再⽅法上
@SneakyThrows(Exception.class)
整个⽅法抛出异常
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论