Posted on 2009-08-09 00:35
kangaroo 阅读(298)
评论(0) 编辑 收藏
- 关注点concern:一个关注点可以是一个特定的问题、概念、或是应用程序的兴趣区间。这是一个概念上的名词,就是应用程序必须达到的一个目标。比如前面提到的安全性检查,事务管理,性能检测都是系统常见的关注点。
- 横切关注点crosscutting concern:如果一个关注点的实现代码(哪怕就一句)散落在很多类或方法之中,我们就称其为横切关注点。
- 方面aspect :一个方面是对一个横切关注点的模块化,它将原本散落在各处的用于实现这个关注点的代码规整在一起。如果“关注点”是个概念上的名词,“方面”就是实在的代码。
- 连接点join point:程序执行过程中的一点,例如:方法调用method invocation(对方法的调用)、字段访问field access(读或写字段)、异常抛出throws(特定的异常被抛出)
- 增强advice:在特定连接点执行的动作。很多AOP框架都以拦截器interceptor的形式来表现增强。拦截器是一种增强,还有别的形式的增强。所谓拦截器是这样一个对象,当连接点被调用时,它会收到一个回调消息。增强的例子包括:在方法调用之前,进行安全性的检查;在执行某个方法的连接点之前开启事务,在方法执行完毕之后提交或回滚事务。
- 切入点:一组连接点的总称,用于指定某个增强应该在何时被调用。切入点常用正则表达式或别的通配符来描述。
- 前增强:在连接点调用之前,首先调用增强。
- 后增强:在连接点调用之后,再调用增强。
- 环绕增强:
- 拦截器:很多AOP框架(如Spring和JBoss4,但不包括AspectJ)用它来实现字段和方法的拦截。随之而来就是在连接点处挂一个拦截器链。拦截只是一种AOP的实现策略,不是AOP的核心概念。
- 目标对象:位于拦截器链末端的对象实例。显然这个概念只存在使用拦截器的AOP框架中。
- AOP代理:被增强的对象引用。也就是,AOP增强将在其上执行的这样一个对象引用。和“拦截器”一样,“AOP代理”只是对于使用拦截机制的AOP框架,而且是其立身之本。
讲了这么多概念,举个例子,把它们串起来,还是以“AOP学习笔记一”里面的“安全性检查”为例:
我们把“安全性检查”作为一个方面,
那么实现安全性检查的拦截器就是一种增强,
方法businessMethod1,businessMethod2,businessMethod3就是连接点,
但是只有businessMethod1和businessMethod2需要增强,所以需要一个切入点,使其只匹配前两个方法。
当我们的业务对象和拦截器都配置到spring之后,spring会在运行时织入,并且生成一个AOP代理。
这个AOP代理将是一个JDK动态代理,将在完成安全性检查之后,调用目标对象。