Нет аргумента конструктора и сериализации De в Java - PullRequest
3 голосов
/ 22 апреля 2020

DeSerialization с использованием механизма интерфейса Serializable использует от Reflection до deserialize байтов объекта для объекта. Но по умолчанию no arg constructor не вызывается во время этого процесса и, следовательно, его не нужно. Но всем фреймворкам, таким как Spring,Hibernate et c, нужно no arg constructor, даже если они используют Reflection. Разве это не противоречит или я что-то упустил?

1 Ответ

2 голосов
/ 22 апреля 2020

Встроенная стандартная десериализация не использует стандартное отражение для создания экземпляров.

Стандартное отражение не может создавать экземпляры без вызова конструктора (не обязательно конструктора no arg). Поэтому любой фреймворк, использующий только стандартное отражение, должен будет вызывать конструктор для создания экземпляра.

Чтобы создавать экземпляры без вызова конструктора, вам нужно какое-то расширение jvm-vendor c, например Unsafe. Именно разработчики фреймворка могут использовать эти расширения, многие решают против этого. (XStream https://x-stream.github.io/faq.html - единственное, что я знаю о том, что на самом деле использует его)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...