Java中没有arg构造函数和De序列化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中没有arg构造函数和De序列化相关的知识,希望对你有一定的参考价值。
DeSerialization
使用Serializable
接口机制使用Reflection
至deserialize
对象字节到对象。但是在此过程中不会调用默认no arg constructor
,因此不需要它。但是,所有框架,例如Spring,Hibernate
等,都需要no arg constructor
,即使它们使用了反射。这不是矛盾的,还是我缺少什么?
答案
内置标准反序列化不使用标准反射来创建实例。
标准反射不能在不调用构造函数的情况下创建实例(不一定是no arg构造函数)。因此,任何仅使用标准反射的框架都需要调用构造函数来创建实例。
要创建实例而不调用构造函数,您需要某种特定于jvm-vendor的扩展,例如Unsafe
。框架开发人员应使用这些扩展,许多人对此表示反对。 (XStream https://x-stream.github.io/faq.html是我所知道的唯一实际使用它的工具)
以上是关于Java中没有arg构造函数和De序列化的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让以前公开的无参数构造函数私有化,而不会对 protobuf(反)序列化进行重大更改?