相信只要使用过Spring框架的,你们对于AOP都不陌生,尤为提起它就能马上随口说出,通常用在日志处理、异常处理、权限验证等方面。但刚开始 接触不免会有各类各样的疑惑,今天抽时间,按照以前的理解整理了一份关于Spring AOP的简单教程,但愿可以帮助你们尽快的了解它的实现过程及原理。首先来明确几个概念:正则表达式
JointPoint框架
系统在运行以前,AOP的功能模块须要织入到OOP的功能模块中。要进行这种织入过程,须要知道在系统的哪些功能点上进行织入操做,这些将要在其上 进行织入操做的系统功能点就称为JointPoint。如某方法调用的时候或者处理异常的时候,在Spring AOP中,一个链接点老是表示一个方法的执行。常见的几种类型的JoinPoint:模块化
Ø 方法调用:当某个方法被调用的时候所处的程序执行点;oop
Ø 方法执行:该类型表示的是某个方法内部执行开始时的点,应该与方法调用相区分;日志
Ø 构造方法调用:程序执行过程当中对某个对象调用其构造方法进行初始化时的点;对象
Ø 构造方法执行:它与构造方法调用关系如同方法调用与方法执行间的关系;教程
Ø 字段设置:对象的某个属性经过setter方法被设置或直接被设置的执行点;资源
Ø 字段获取:某个对象相应属性被访问的执行点;原理
Ø 异常处理执行:某些类型异常抛出后,对应的异常处理逻辑执行点;权限
Ø 类初始化:类中某些静态类型或静态块的初始化时的执行点。
Pointcut
Pointcut表明的是JoinPoint的表述方式。在将横切逻辑织入当前系统的过程当中,虽然知道须要在哪些功能点上织入AOP的功能模块,但 须要一种表达方法。Pointcut和一个切入点表达式关联,并在知足这个切入点的Joinpoint上运行。目前一般使用的Pointcut方式有如下 几种:
Ø 直接指定Joinpoint所在的方法名称;
Ø 正则表达式,Spring的AOP支持该种方式;
Ø 使用特定的Pointcut表述语言,Spring 2.0后支持该方式。
Advice
Advice是单一横切关注点逻辑的载体,它表明将会织入到JoinPoint的横切逻辑。在切面的某个特定的链接点上执行的逻辑。根据它在Joinpoint位置执行时机的差别或完成功能的不一样,可分为如下几种形式:
Ø Before Advice:在Joinpoint指定位置以前执行的Advice类型,能够采用它来作一些系统的初始化工做,如设置系统初始值,获取必要系统资源等。
Ø After Advice:在相应链接点以后执行的Advice类型,它还能够细分为如下三种:
² After Returning Advice:只有当前Joinpoint处执行流程正常完成后,它才会执行;
² After throwing Advice:在当前Joinpoint执行过程当中抛出异常的状况下会执行;
² After Advice:该类型的Advice无论JoinPoint处执行流程是正常仍是抛出异常都会执行。
Ø Around Advice:对附加其上的Joinpoint进行包裹,能够在joinpoint以前和以后都指定相应的逻辑,甚至中断或忽略joinpoint处原来程序流程的执行。
Aspect
它是对系统中横切关注点逻辑进行模块化封装的AOP概念实体,它能够包含多个Pointcut以及相关的Advice定义。
织入器
通过织入过程后,以Aspect模块化的横切关注点才会集成到oop的现存系统中,而完成织入过程实体称为织入器。Spring中使用一组类来完成最终的织入操做,ProxyFactory类是Spring AOP最通用的织入器。
目标对象
符合Pointcut所指定的条件,将在织入过程当中被织入横切逻辑的对象,称之为目标对象。
单看上述的概念,可能会以为有点眼花缭乱,其实经过一个简单的AOP的实例便可以帮助咱们很快的了解其内部的机制。其实对于方法拦截有不一样的实现方 式,经常使用的即有直接采用Spring提供的各类Advice进行拦截,另外一种则是采用MethodInterceptor方式进行拦截。