Hibernate如何创建具体类的代理?
据我所知,创建动态Java代理需要有一个接口来处理代理。 然而,Hibernate似乎管理其动态代理生成,而不需要为实体类编写一个接口。 它是如何做到的? Hibernate文档中唯一的线索是指类必须至少具有用于代理生成的包可见构造函数。
Hibernate是否使用自定义类加载器进行运行时字节码工程? 文档表明情况并非如此。 那么他们如何围绕具体的实体对象创建代理包装器呢? 他们只是创建一些简单的界面代理而不用担心类型安全,然后根据需要进行投射吗?
从Hibernate 3.3开始,默认的字节码提供程序现在是Javassist而不是CGLib。
Hibernate核心迁移指南:3.3
Hibernate使用hibernate.properties
配置的字节码提供程序,例如:
hibernate.bytecode.provider=javassist
要使用java中的代理创建者,是的,你是对的,但我相信hibernate使用CGLib来生成它的代理。
它是一个很酷的程序,不需要接口来生成代理。
(也许有一天hibernate将转向使用AOP,世界将会变得更好)。
有关详细信息,请参阅类javassist.util.proxy.ProxyFactory 。
- Web Java变量重置
- 默认情况下,在Hibernate中为所有FetchType.LAZY非集合启用无代理行为
- 从Spring MVC XML文件迁移到javaconfig。 我真的迷失了我的数据库XML文件
- hibernate是否支持count(*)over()
- 如何使用Hibernate动态创建数据库中的表?
- 在JPA / Hibernate中建模两对多关系
- 使用PostgreSQL,为什么Hibernate / JPA不会创建级联约束?
- 使用Spring Boot + Hibernate + MySql运行MVC应用程序
- onSave()(用于使用Hibernate / Spring Data Repositories保存的任何实体)