Java中没有arg构造函数和De序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中没有arg构造函数和De序列化相关的知识,希望对你有一定的参考价值。

DeSerialization使用Serializable接口机制使用Reflectiondeserialize对象字节到对象。但是在此过程中不会调用默认no arg constructor,因此不需要它。但是,所有框架,例如Spring,Hibernate等,都需要no arg constructor,即使它们使用了反射。这不是矛盾的,还是我缺少什么?

答案

内置标准反序列化不使用标准反射来创建实例。

标准反射不能在不调用构造函数的情况下创建实例(不一定是no arg构造函数)。因此,任何仅使用标准反射的框架都需要调用构造函数来创建实例。

要创建实例而不调用构造函数,您需要某种特定于jvm-vendor的扩展,例如Unsafe。框架开发人员应使用这些扩展,许多人对此表示反对。 (XStream https://x-stream.github.io/faq.html是我所知道的唯一实际使用它的工具)

以上是关于Java中没有arg构造函数和De序列化的主要内容,如果未能解决你的问题,请参考以下文章

反序列化的Gson异常(no-args构造函数不存在)

有没有办法让以前公开的无参数构造函数私有化,而不会对 protobuf(反)序列化进行重大更改?

java中创建对象了,显示初始化值和构造函数初始化对象的区别?先后执行顺序是啥?

java中Character中构造函数

java 反射 如何得到构造函数的参数列表

在 Java 中重写 GroupLayout 构造函数