Spring中切面详解(AOP)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中切面详解(AOP)相关的知识,希望对你有一定的参考价值。

参考技术A

注意: 下面的测试是spring4版本,spring5的执行顺序有变化, 请看

语法: execution( [权限修饰符] [返回类型] [方法名称] ([参数列表]))

CommonAspect:

结果1: 可以发现没有异常通知

结果2:

可以发现:上面5中通知类型的切入点表达式都是一样的,于是可以将切入点抽取出来。

如果 多个增强类 对同一个方法(或多个方法)增强,设置增强类的优先级:

spring aop切面表达式详解及例子

参考技术A

切面类型

execution格式

通配符

例子

一、 execution :使用“ execution (方法表达式)”匹配方法执行;

二、 within :使用“ within (类型表达式)”匹配指定类型内的方法执行;

三、 this :使用“ this (类型全限定名)”匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口方法也可以匹配;注意this中使用的表达式必须是类型全限定名,不支持通配符;

四、 target :使用“ target (类型全限定名)”匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;注意target中使用的表达式必须是类型全限定名,不支持通配符;

五、 args :使用“ args (参数类型列表)”匹配当前执行的方法传入的参数为指定类型的执行方法;注意是匹配传入的参数类型,不是匹配方法签名的参数类型;参数类型列表中的参数必须是类型全限定名,通配符不支持;args属于动态切入点,这种切入点开销非常大,非特殊情况最好不要使用;

六、 @within :使用“ @within (注解类型)”匹配所以持有指定注解类型内的方法;注解类型也必须是全限定类型名;

七、 @target :使用“ @target (注解类型)”匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;注解类型也必须是全限定类型名;

八、 @args :使用“ @args (注解列表)”匹配当前执行的方法传入的参数持有指定注解的执行;注解类型也必须是全限定类型名;

九、 @annotation :使用“ @annotation (注解类型)”匹配当前执行方法持有指定注解的方法;注解类型也必须是全限定类型名;

十、 bean :使用“ bean (Bean id或名字通配符)”匹配特定名称的Bean对象的执行方法;Spring AOP扩展的,在AspectJ中无相应概念;

以上是关于Spring中切面详解(AOP)的主要内容,如果未能解决你的问题,请参考以下文章

Spring AOP面向切面编程详解

AOP相关概念及Spring基于XML的AOP详解

Spring框架——AOP(面向切面编程)详解

Spring面向切面编程详解(AOP)

Spring框架系列(10) - Spring AOP实现原理详解之AOP代理的创建

详解Spring面向切面编程(AOP)三种实现