AOP使用
一、切入点和通知
切入点cutpoint : 用于匹配一个方法是否需要进行拦截的判断逻辑
常用9种切入点:
execution:一般用于指定方法的执行,用的最多。
within:指定某些类型的全部方法执行,也可用来指定一个包。
this:Spring Aop是基于动态代理的,生成的bean也是一个代理对象,this就是这个代理对象,当这个对象可以转换为指定的类型时,对应的切入点就是它了,Spring Aop将生效。
target:当被代理的对象可以转换为指定的类型时,对应的切入点就是它了,Spring Aop将生效。
args:当执行的方法的参数是指定类型时生效。
@target:当代理的目标对象上拥有指定的注解时生效。
@args:当执行的方法参数类型上拥有指定的注解时生效。
@within:与@target类似,看官方文档和网上的说法都是@within只需要目标对象的类或者父类上有指定的注解,则@within会生效,而@target则是必须是目标对象的类上有指定的注解。而根据笔者的测试这两者都是只要目标类或父类上有指定的注解即可。
@annotation:当执行的方法上拥有指定的注解时生效。
通知Advice : 用于何时执行和定义执行逻辑
常用5种通知
—@Before:前置通知在方法执行前执行
—@After:后置通知,在方法执行后执行
—@AfterReturning:返回通知,在方法返回结果之后执行
—@AfterThrowing:异常通知,在方法抛出异常后执行
—@Around:环绕通知,围绕着方法执行
二、通知执行顺序
1、同一个切面类
正常情况:
异常情况:
2、多个切面类 可通过@Order指定顺序,越小优先级越大,像调用链模式一样层层调用
参考:
https://blog.csdn.net/f641385712/article/details/83543270
https://blog.csdn.net/rainbow702/article/details/52185827