AOP的成员介绍

  AOP(Aspect Oriented Programming)面向切面编程,AOP的作用不过多介绍,本文是主要是介绍AOP的成员,是我在复习的时候记录的一些笔记,方便以后查阅方便一些。

  JointPoint(连接点),在系统运行的之前,AOP的功能模块都需要织入到OOP的功能模块上,JointPoint就代表了在哪些执行点上进行织入操作的点。JointPoint可以是类的初始化、方法的调用、方法的执行、方法的调用、字段设置、字段获取、异常处理执行等。下面举例说明:

  

public class JointPointTest
{
    private String name;

    public JointPointTest()
    {
        //doSomething
    }

    public void toDo()
    {
        //doSomething
    }
    
    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}
View Code
public class Main
{
    public static void main(String[] args)
    {
        //JointPointTest类见上面代码
     JointPointTest jointPointTest
= new JointPointTest();//构造方法执行 jointPointTest.setName("aaa");//字段设置(通过set方法与直接赋值的触发时间是相同的) jointPointTest.getName();//字段获取 jointPointTest.toDo();//方法调用。方法执行即进入toDo方法的内部,对于同一对象方法的调用要早与方法的执行。
     //异常处理执行,即当某些类型异常抛出的时候,对应的异常处理逻辑执行点。
     //类的初始化, 类的静态类型或者静态块的初始化时点。    } }

  Pointcut(切入点),简单的理解就是JointPoint的集合。Pointcut代表的是JointPoint的表述方式,当横切逻辑织入到当前系统的时候,需要参照Pointcut规定的JointPoint信息。

    Pointcut的表述方式有很多:

    1.直接指定JointPoint所在方法名称。(一般不用,因为配置较多的情况比较不好表述。)

    2.正则表达式。

    3.使用特定的Pointcut表述语言。例如AspectJ,Spring默认使用的就是AspectJ的Pointcut表述语言。

    Pointcut运算(Pointcut与Pointcut之前还可以进行逻辑运算,这样我们就可以得到我们需要的较为复杂的Pointcut),不同的AOP实现产品不同,所以运算的表达方式不尽相同。

  Advice(通知),Advice很好理解就是JointPoint的执行时机。

    可以分为:

      1. 前置通知(before advice):在JointPoint指定位置之前执行。

      2. 后置通知(after advice):在JointPoint指定位置之后执行。分为以下三种:

        1) after return advice :只有当前JointPoint处流程正常结束后才执行after return advice。(即没有异常出现)

        2) after throwing advice :只有当前JointPoint处流程抛出异常时候才执行after throwing advice。

        3) after advie :或许叫after finally advice比较准确,它是不管当前JointPoint是否正常结束都会执行,就像JAVA当中的finally块中的代码一样。

      3. 环绕通知(around advice):可以再JointPoint之前和之后都指定相应的处理流程。

      4. introduction:与其他的通知不同,introduction不是根据JointPoint的执行时机来区分的,而是根据它可以完成的功能而区别其他的advice。

  Aspect(切面),是对系统的advice与pointcut进行模块化封装的AOP概念实体。可以包含多个pointcut与advice的相关定义。AspectJ可以使用@AspectJ注解并且结合普通的POJO来声明Aspect。

  上面介绍的就是AOP的基本成员,虽然是自己便于以后查阅,但是同时希望对大家有所帮助。

  

  

posted @ 2013-11-12 15:22  阿春阿晓  阅读(1314)  评论(1编辑  收藏  举报