|
楼主 |
发表于 2006-10-12 16:50
|
显示全部楼层
在 <<J2ee development without ejb>>中文版 283页,有这样一句:
请注意,如果映射JavaBean属性,只跟Hibernate持久化相关的那些getter和setter可以是protected甚至private的,以保证由应用程序驱动字段的可见度.
页尾有这样的注释:
译者注:然而据译者的观察,如果将 setter声明为private,会导致 Hibernate 无法使用CGLIB优化的反射机制,只能通过标准的JAVA反射机制为持久对象
所有的持久化类(persistent classes)都要求有无参的构造器,因为Hibernate必须使用Java反射机制来为你创建对象。构造器(constructor)的访问级别可以是private,然而当生成运行时代理(runtime proxy)的时候则要求使用至少是package 级别的访问控制,这样在没有字节码指令(bytecode instrumentation)的情况下,从持久化类里获取数据会更有效率。 所有的持久化类(persistent classes)都要求有无参的构造器,因为Hibernate必须使用Java反射机制来为你创建对象。构造器(constructor)的访问级别可以是private,然而当生成运行时代理(runtime proxy)的时候则要求使用至少是package 级别的访问控制,这样在没有字节码指令(bytecode instrumentation)的情况下,从持久化类里获取数据会更有效率。
综合以前所有发现和楼主的解释,Hibernate应该是首选CGLIB,次选反射机制。
[ 本帖最后由 powerwind 于 2006-10-12 16:53 编辑 ] |
|