12

据我所知,创建一个动态 Java 代理需要一个接口来为代理工作。然而,Hibernate 似乎无需为实体类编写接口即可管理其动态代理生成。它是如何做到的?来自 Hibernate 文档的唯一线索是,类必须至少有一个包可见的构造函数才能生成代理。

Hibernate 是否使用自定义类加载器进行运行时字节码工程?文档表明情况并非如此。那么他们如何围绕具体实体对象创建代理包装器呢?他们是否只是创建一些琐碎接口的代理而不考虑类型安全,然后根据需要进行转换?

4

3 回答 3

8

从 Hibernate 3.3 开始,默认的字节码提供程序现在是 Javassist 而不是 CGLib。

Hibernate 核心迁移指南:3.3

于 2008-12-30T15:41:10.210 回答
4

Hibernate 使用 中配置的字节码提供程序hibernate.properties,例如:

hibernate.bytecode.provider=javassist
于 2010-08-01T21:09:08.410 回答
3

有关详细信息,请参阅类javassist.util.proxy.ProxyFactory

于 2009-09-11T07:27:39.390 回答