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等注解,然后编写方法建议中的业务代码。