用户登录
用户注册

分享至

hibernate中的cglib包

  • 作者: 错落年间我许你一生10757801
  • 来源: 51数据库
  • 2021-01-28
是SPRING吧?

spring对AOP的支持
? 如果目标实现了接口,默认采用JDK的动态代理机制实现AOP,
? 如果目标实现了接口,可以强制Spring采用CBLIB类来使用代理.
? 如果目标没有实现接口,必须强制Spring采用CBLIB类来使用代理.SPRING会自动在CGLIB和JDK的动态代理机制中切换.

强制使用CGLIB生成代理.
1在spring配置文件中加入

2 加入CGLIB库
spring/lib/cglib/*.jar

HIBERNATE就是一个ORM框架,是一种JPA的实现
cglib-asm.jar:
CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包
asm.jar ASM字节码库 如果使用“cglib”则必要
asm-attrs.jar ASM字节码库 如果使用“cglib”则必要
cglib.jar CGLIB 字节码解释器 如果使用“cglib”则必要



  cglib用来继承类或实现接口以产生对象。
源自cglib官网http://cglib.sourceforge.net/的summary。

hibernate用到了注解技术,它是从元数据如何在早期java版本中使用属性文件的原理逐渐发展为今日的注解。
处理注解的三种方式:生成器、字节码转换、运行时反射。

字节码转换:注解处理器对带有注解的类字节码文件进行解析,对其做一些适当的修改,再重新编译并生成新的对象,也能生成其他类型文件(如xml)。字节码转换器在编译期(离线状态)、装载期都能运行,还能在运行时动态转换,且在字节码文件或runtime这样的保持策略下也可运行。

利用cglib产生新对象会提高字节码转换的效率,二者有一定的依存关系。

我也是查了有关资料,仅能说到这个程度了,再细想想我也不懂了,呵呵。至于hibernate的工作原理,网上好多啦,我就不ctrl + v了。



  一点需要确认同一个类不应该出现在两个不同的地方,如果 jboss 自了 cglib,你考虑把它从你的 web-inf/lib 下删除。其它的 jar 也是同样的原理。



  JDK的代理是需要接口才能做的,所以如果没有接口也要代理就实现不了了,
就需要cglib来直接修改2进制码,实现代理和面向切面



  动态代理 就和你做一件事情一样 由别人代替执行 其实就是中间人做了



  Hibernate用它来实现PO字节码的动态生成。
软件
前端设计
程序设计
Java相关