序列化和lombok

序列化-将java对象转换为字节对象
Serializable实现
dubbo服务在调用的时候,传输的实体必须要实现序列化
java.lang.IllegalStateException: Serialized class com.c4tman.mock.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实现无参构造方法

注解在属性上
@NonNull
属性不能为空,且默认有该属性的构造方法,无无参构造。

注解在变量上
@CleanUp
调用变量的close()方法。

注解再方法上
@SneakyThrows(Exception.class)
整个方法抛出异常

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 10,908评论 0 24
  • 在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们创建出来的这些...
    懒癌正患者阅读 1,539评论 0 12
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 2,833评论 0 10
  • 【一】你送我的画,被你丢入水中。画上的人,素白的裙,青花的裾。笔触间有着绵绵情意,而今却付诸流水。青花隐入水中,随...
    兔巴葛阅读 455评论 0 4
  • 如果说爱情是美丽的鲜花,那么婚姻则是甜蜜的果实,如果说爱情是初春的小雨,那么婚姻便是雨后灿烂的阳光。在这样...
    其霞阅读 380评论 2 8