代码之家  ›  专栏  ›  技术社区  ›  Kris Nuttycombe

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

  •  12
  • Kris Nuttycombe  · 技术社区  · 17 年前

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

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

    4 回复  |  直到 13 年前
        1
  •  8
  •   Taoufik Mohdit    13 年前

    自从Hibernate 3.3以来,默认的字节码提供程序现在是Javassist而不是CGLIB。

    Hibernate Core Migration Guide : 3.3

        2
  •  4
  •   sth    16 年前

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

    hibernate.bytecode.provider=javassist
    
        3
  •  3
  •   Vincent    17 年前

    要使用爪哇中的代理创建程序,是的,您是正确的,但我相信Hibernate使用CGLIB来生成代理。

    http://cglib.sourceforge.net/

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

    (也许有一天冬眠会转移到使用AOP,世界会变得更好)。

        4
  •  3
  •   Martin    17 年前