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是我所知道的唯一实际使用它的工具)