是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字节码的动态生成。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....