CgLib ,NCgLib 和AOP

原创 2004年10月11日 22:42:00
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

CgLib ,NCgLib 和AOP (之一)

CgLib ,NCgLib 和AOP    广大关心编程前沿的程序员已经对AOP的感念耳熟能详了。无论是基于.NET的实现还是基于Java的实现都有很多开源的项目可供参考。    对AOP不了解的读者...
  • accesine960
  • accesine960
  • 2004年08月09日 21:18
  • 4023

AOP的底层实现-CGLIB动态代理和JDK动态代理

详细介绍了AOP的核心功能(拦截功能)在底层是如何实现的;介绍了两种实现AOP的动态代理:jdk动态代理和cglib动态代理,并详细描述了它们在代码层面的实现。...
  • dreamrealised
  • dreamrealised
  • 2013年10月20日 19:53
  • 28865

使用CGLIB实现AOP功能与AOP概念解释

使用CGLIB实现AOP功能在Java里面,我们要产生某个对象的代理对象,这个对象必须要有一个特点,即这个对象必须实现一个接口,动态代理技术只能基于接口进行代理。有时候我们在做开发的时候,这个对象就没...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月19日 22:38
  • 1646

Spring—AOP两种代理机制对比(JDK和CGLib动态代理)

Sprign 动态代理机制 Spirng的AOP的动态代理实现机制有两种,分别是: 1)JDK动态代理: 具体实现原理: 1、通过实现InvocationHandlet接口创建自己的调...
  • qq1723205668
  • qq1723205668
  • 2017年02月22日 12:09
  • 2935

【Spring AOP】【AspectJ】【CGLIB】【JDK动态代理】【JDK静态代理】区别

今天复习了一下AOP相关概念。 有这么几个知识名词需要好好理解一下。 基本上可以概括为动态和静态两类 【动态】CGLIB、JDK动态代理、Spring AOP 【静态】AspectJ、JDK静态代理...
  • yanxin007
  • yanxin007
  • 2017年01月10日 13:22
  • 1784

《Spring设计思想》AOP实现原理(基于JDK和基于CGLIB)

在上篇文章《Spring设计思想》AOP设计基本原理 中阐述了Spring AOP 的基本原理以及基本机制,本文将深入源码,详细阐述整个Spring AOP实现的整个过程。 读完本文,你将了解到: ...
  • u010349169
  • u010349169
  • 2016年04月16日 19:10
  • 13254

Spring中AOP实现的两种方式之JDK和cglib的动态代理

AOP的实现原理: 都是基于代理模式,都是生成一个大代理对象 静态AOP: AspectJ实现的AOP, 将切面代码直接编译到Java类文件中 ...
  • he90227
  • he90227
  • 2016年08月31日 20:03
  • 2802

Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)

关于动态代理模式里面有两种实现,一种是jdk实现,一种是cglib来实现。 下面来整jdk来实现动态代理的Java实例。 jdk动态代理模式里面有个拦截器的概念,在jdk中,只要实现了Invocati...
  • qq_27093465
  • qq_27093465
  • 2016年11月25日 21:40
  • 2846

Spring--Spring AOP 实现原理与 CGLIB 应用

转摘自:https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/#icomments AOP(Aspect Orient Pr...
  • szzt_lingpeng
  • szzt_lingpeng
  • 2016年03月30日 17:21
  • 1177

spring学习笔记(7)AOP前夕[2]CGLib动态代理实例解析

CGLib动态代理基本原理CGLib——Code Generation Library,它是一个动态字节代码生成库,基于asm。使用CGLib时需要导入asm相关的jar包。而asm又是何方神圣? ...
  • qwe6112071
  • qwe6112071
  • 2016年03月24日 18:51
  • 1692
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CgLib ,NCgLib 和AOP
举报原因:
原因补充:

(最多只允许输入30个字)