Hibernate如何创建具体类的代理?

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

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

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

Hibernate核心迁移指南:3.3

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

 hibernate.bytecode.provider=javassist 

要使用java中的代理创建者,是的,你是对的,但我相信hibernate使用CGLib来生成它的代理。

http://cglib.sourceforge.net/

它是一个很酷的程序,不需要接口来生成代理。

(也许有一天hibernate将转向使用AOP,世界将会变得更好)。

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