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

问题描述 投票:2回答:1

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

java spring hibernate serialization serializable
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.