一尘不染

为什么Hibernate不需要参数构造函数?

java

无参数构造函数是必需的(像Hibernate这样的工具在此构造函数上使用反射来实例化对象)。

我得到了这个挥手回答,但是有人可以进一步解释吗?谢谢

Java Hibernate Orm 工厂模式


阅读 304

收藏
2020-03-23

共1个答案

一尘不染

Hibernate,并且通常通过反射创建对象的代码Class<T>.newInstance()用于创建类的新实例。此方法需要一个公共的无参数构造函数才能实例化该对象。对于大多数用例,提供无参数构造函数不是问题。

有一些基于序列化的技巧可以解决没有no-arg构造函数的问题,因为序列化使用jvm magic创建对象而无需调用构造函数。但这并非在所有VM上都可用。例如,XStream可以创建没有公共no-arg构造函数的对象实例,但只能通过在所谓的“增强”模式下运行,该模式仅在某些VM上可用。(有关详细信息,请参见链接。)Hibernate的设计人员肯定会选择保持与所有VM的兼容性,因此避免了此类技巧,并使用了正式支持的,Class<T>.newInstance()需要无参数构造函数的反射方法。

2020-03-23