spring aop 的理解

spring aop的相关概念(所有的概念都是为了生成代理类这个过程所需要的信息的抽象):

  1.Targer:目标对象。被代理的对象。

  2.Advice:增强/通知。就是为目标对象扩展的功能。分为前置增强、后置增强,异常增强,最终增强,环绕增强。

  3.Pointcut:切入点。指明增强要在目标对象的那些方法上使用。

  4.Aspect:切面。就是增强(通知)和切入点的集合。如果一个切面没有切入点,那么增强就是一个切面,这个使用增强应用在目标类的所有方法上

  5.Joinpoint:连接点。用来在增强的中获取目标对象信息的对象(主要用在aspectj方式配置的时候。传统的方式配置的时候可以直接通过方法传递过来的参数得到目标类的信息)

  6.Introduction:引介。一种技术,一种特殊的通知在不修改类代码的前提下,可以在运行期为类动态地添加一些方法或Field.

  7.Weaving:织入。一种技术,把增强应用到目标对象,生成代理对象的过程

  8.Proxy:代理。就是和目标和有相同的方法名对象。该方法内部是增强代码和目标对象同名方法代码的集合(即目标方法功能被扩展了)

  9.spring采用动态代理织入,而AspectJ采用编译期织入类转载期织入

参考链接:

http://blog.csdn.net/lutianfeiml/article/details/51744488 这篇文章配置aop的方式讲的有点乱

具体的配置方式参见:

http://www.cnblogs.com/jacksonshi/p/5863313.html

aspectj的表达式参考链接:

http://jinnianshilongnian.iteye.com/blog/1415606

总结:

1.需要注意的通知:

  1)后置通知配置的增强的时候需要加上returning属性,该增强中可以通过传递进来的Object对象获得目标方法的返回值;

  2)异常通知配置的时候需要加上throwing属性,该增强中可以通过传递进来的Throwable对错获得目标方法发送异常的信息;

  3)环绕通知 要通过传递进来的ProceedingJoinPoint对象,调用jointPoint方法来决定是否执行目标方法,然后在该方法前后添加前后逻辑,达到环绕的效果,最后手动返回目标方法执行的返回值,如果有的话 

2.关于各种通知执行的顺序

  1)如果是采用aspectj 的xml文件配置的方式,执行的顺序首先是 首先根据通知定义顺序执行,比如前置通知一定在通知前面执行,可以互相影响的情况下是按xml中配置的顺序执行的,比如前置通知 和环绕通知,后置通知和最终通知等。

  2)如果是以注解方式配置的,系统好像(我自己测试的现象是这样,有待确认)有默认的执行顺序。

环绕通知 前
前置通知
eat
环绕通知 后
最终通知
后置通知9
9

3.aspectj 注解和xml配置的区别

  1)注解方式和xml配置可以共存

  2)同一个异常通知,前置通知,最终通知,后置通知对目标对象的方法配置了几次,那么运行的时候就运行几次,但是环绕通知不行,会报错

  3)xml配置的方式比注解方式更通用,如果要通知执行顺序 要有严格的把握以及增强没有源代码的情况下,建议使用xml配置的方式配置aop

注意以上,不保证正确,只是我自己的笔记,如有有错误,欢迎指正。

原文地址:https://www.cnblogs.com/wanjn/p/7349280.html