CgLib ,NCgLib 和AOP
来源:互联网 发布:条形码扫描记录软件 编辑:程序博客网 时间:2024/05/10 07:11
AOP的特点之一是Interception,就是拦截。比如在方法执行前,执行中,执行后动态插入一些额外的方法,典型的就是日志,权限和事务控制。
无论是java的字节代码,还是.net的伪编译,他们生成的都不是最终的机器代码,而是平台无关的代码,这些代码在具体执行的时候还需要翻译成机器代码才可以执行。中间语言的出现使我们对执行前的代码有了更多的控制。
正因为如此AOP的理论有了实现的可能,这个时候出现可谓水到渠成。
一般来讲AOP的实现有3种途径:
1 在编译成中间代码前就让代码具有AOP的特性,比如AspectWikez;
2 使用语言特性,从设计方法出发,实现AOP,比如基于Java 的动态代理实现AOP. 3 在中间代码运行时,动态修改中间代码,使其具有AOP特性。
上面3种方法的有缺点我认为有几下几点:
采用的一种方法,一般需要编译器的扩充支持,如同C编译器的出现代替汇编一样,需要长时间的验证其稳定性和效率。另外对于最终开发人员来说也需要学习这些编译器,或者新的语法指令完成这些功能,当然功能也最强大。
第2种方法,我认为是一种轻量级别的实现,比如Nanning 和 DynAOP 等,一般这样的实现需要在设计上下功夫。比如需要基于接口编程。对于已有的项目来说,改动量非常大。
第3种方法,介于1,2种方法之间。采用第3种方法实现AOP,不需要每个类都有一个接口,也没有什么编译器的更改。他的缺点是需要高超的编程技巧。正因为如此,才有很多项目用第3种方法包装后,给最终开发人员使用比如:Spring。
实际上Spring 的AOP实现种第1,2种方法都采用了。
我认为目前的项目种,大规模的采用AOP还不适合,一方面AOP还在发展之中,另一方面支持AOP的框架还没有被广泛的接受。
正因为如此我们不妨直接操作中间代码,在项目的一些关键地方实现一些AOP的特性。
那在Java的世界中可以用cglib,Javassist 等
在.net的世界中可以用ncglib
无论是java的字节代码,还是.net的伪编译,他们生成的都不是最终的机器代码,而是平台无关的代码,这些代码在具体执行的时候还需要翻译成机器代码才可以执行。中间语言的出现使我们对执行前的代码有了更多的控制。
正因为如此AOP的理论有了实现的可能,这个时候出现可谓水到渠成。
一般来讲AOP的实现有3种途径:
1 在编译成中间代码前就让代码具有AOP的特性,比如AspectWikez;
2 使用语言特性,从设计方法出发,实现AOP,比如基于Java 的动态代理实现AOP. 3 在中间代码运行时,动态修改中间代码,使其具有AOP特性。
上面3种方法的有缺点我认为有几下几点:
采用的一种方法,一般需要编译器的扩充支持,如同C编译器的出现代替汇编一样,需要长时间的验证其稳定性和效率。另外对于最终开发人员来说也需要学习这些编译器,或者新的语法指令完成这些功能,当然功能也最强大。
第2种方法,我认为是一种轻量级别的实现,比如Nanning 和 DynAOP 等,一般这样的实现需要在设计上下功夫。比如需要基于接口编程。对于已有的项目来说,改动量非常大。
第3种方法,介于1,2种方法之间。采用第3种方法实现AOP,不需要每个类都有一个接口,也没有什么编译器的更改。他的缺点是需要高超的编程技巧。正因为如此,才有很多项目用第3种方法包装后,给最终开发人员使用比如:Spring。
实际上Spring 的AOP实现种第1,2种方法都采用了。
我认为目前的项目种,大规模的采用AOP还不适合,一方面AOP还在发展之中,另一方面支持AOP的框架还没有被广泛的接受。
正因为如此我们不妨直接操作中间代码,在项目的一些关键地方实现一些AOP的特性。
那在Java的世界中可以用cglib,Javassist 等
在.net的世界中可以用ncglib
- CgLib ,NCgLib 和AOP
- CgLib ,NCgLib 和AOP (之一)
- Spring-AOP: JDK代理和CGLIB代理
- Spring-AOP: JDK代理和CGLIB代理
- spring对AOP的支持(JDK的动态代理实现AOP和CGLIB实现AOP)
- spring AOP动态代理和CGLIB字节码生成
- AOP的JDK动态代理和CGLIB的代理
- AOP实现--JDK中的动态代理和cglib代理
- 使用jdk和cglib实现spring的aop功能
- java代理模式(JDK和cglib以及Spring AOP)
- AOP编程之JDK动态代理和Cglib动态代理
- AOP之JDK动态代理和CGLib动态代理
- spring对AOP的支持 jdk和cglib
- Spring AOP,基于动态代理和字节码(CGLIB)区别
- 【Spring】——AOP实现原理(基于JDK和CGLIB)
- Spring AOP demo 和获取被CGLIB代理的对象
- 基于Spring AOP的JDK动态代理和CGLIB代理
- spring aop与cglib aop
- 在Eclipse中使用SWT进行界面设计
- AMD英特尔中国斗法:无休止的报复与全力对抗
- 向RAID5开战!
- 一个程序自动刷新页面的例子(例如搜新浪小人)
- Because You Loved Me歌词
- CgLib ,NCgLib 和AOP
- servlet的两种重定向方法的区别及应用
- 你尽力了么
- 休息很久了 要写点东西哦~
- 安装mysql后启动的问题
- 你们好:
- [zt] 道德经
- 如何迅速成为Java高手[Tomjava原创]
- 看两篇论文