spring aop 即面些切面编程

具体的关键点在于:

    CGLIB的动态代理技术,可以代理类和接口,相对于JDK自带的动态代理技术,多了可以代理除了接口的类的功能。

具体流程:

    通过切面的思想,在类加载的同时,进行一些增强操作,如记录到日志中等

    在jvm中,我们程序运行都是以方法为基本单位,那么就是纵向的程序执行方式,这时,aop引入了一个连接点的概念,所谓的连接点(join Point),就是所谓的方法。  而我们选择的切入点(point cut),就是选择哪几个方法的过程。

选择完切入点后,我们就需要获取到方法,即所谓的连接点,那么aop就是利用的动态代理的模式来获取到的,加入动态代理后的程序,会先执行动态代理(通过的也是IOC的方式)对象的方法,然后在去执行原本的方法,在spring aop框架中,它能够获取到所有的非final的public方法,因此能够插入一些我们自己的业务代码。

具体的插入aop提供了 这样的一个思路,即 (简单版)

before Method 之前怎么做
try {
    调用 Method
} catch (InterruptedException e) {
    异常的怎么做
} finally {
    返回结果之前怎么做
}

在aop中,我们又存在了一个advice和aspect的概念,advice即上述途中给出的思路,它包括了前置,后置,环绕,异常等建以,而aspect就是这一整个通知的汇总。

利用一个aop的日志注解实现来说明以上几个概念:

    首先我们需要定义一个接口,在接口上加上注解,形成所谓的切点。

    在利用这个注解,添加到我们需要代理的方法头上,找到切入点。

   接着我们就能创建一个aspect类,内部声明advice内的方法,具体操作为新建方法,加上@before,@around等注解,然后编写方法建议中的业务代码。

    

08-21 19:26