Spring 使用介绍—— AOP详解
Posted mattcheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 使用介绍—— AOP详解相关的知识,希望对你有一定的参考价值。
一、切入点语法
1)通配符
AOP支持的通配符:
*:匹配任何数量字符
..:匹配任何数量字符的重复,在类型模式中匹配任何数量子包,在方法参数模式中匹配任何数量参数
+:匹配指定类型的子类型,仅能作为后缀放在类型模式后边
实例:
java.lang.String 匹配String类型 java.*.String 匹配java包下的任何“一级子包”下的String类型,如匹配java.lang.String,但匹配java.String或java.lang.ss.String java..* 匹配java包及任何子包下的任何类型,如java.String、java.lang.String java.lang.*ing 匹配任何java.lang包下的以ing结尾的类型 java.lang.Number+ 匹配任何java.lang.Number的子类型,如java.lang.Integer、java.math.BigInteger
2)类型匹配,语法如下:
注解? 类的全限定名
- 注解:可选,类型上持有的注解
- 类的全限定名:必填,任何类全限定名
3)方法匹配,语法如下:
注解? 修饰符? 返回值类型 类型声明?方法名(参数列表) 异常列表?
- 注解:可选,方法上持有的注解
- 修饰符:可选,如public、protected
- 返回值类型:必填,可以是任何类型模式,“*”表示所有类型
- 类型声明:可选,可以是任何类型模式
- 方法名:必填,“*”表示任何方法名
- 参数列表:必填,如:
- () 表示方法没有任何参数
- (..) 表示方法接受任意个参数
- (..,java.lang.String) 表示方法接受java.lang.String类型的参数结束,且其前边可以接受有任意个参数
- (*,java.lang.String) 表示方法接受java.lang.String类型的参数结束,且其前边接受有一个任意类型参数
- 异常列表:可选,以“throws 异常全限定名列表”声明,异常全限定名列表如有多个以“,”分割,如throws cn.matt.Exception1,cn.matt.Exception2
4)切入点表达式逻辑运算符
AOP使用 且(&&)、或(||)、非(!)来组合切入点表达式
在XML中,“&&”须使用转义字符“&&”代替,不方便,因此Spring提供了and、or、not来代替&&、||、!
注意:替代符(and、or、not)仅在xml中可用,注解方式使用时会解析错误
5)execution命令 使用“execution(方法表达式)”匹配方法执行
实例:
public * *(..) 任何公共方法的执行 * cn.javass..*.*(..) cn.javass包及所有子包下任何类的任何方法 * cn.javass..IPointcutService.*(*) cn.javass包及所有子包下IPointcutService接口的任何只有一个参数方法 * cn.javass..IPointcutService+.*() cn.javass包及所有子包下IPointcutService接口及子类型的的任何无参方法 * (cn.javass..IPointcutService+&& java.io.Serializable+).*(..) 任何实现了cn.javass包及所有子包下IPointcutService接口和java.io.Serializable接口的类型的任何方法 @java.lang.Deprecated @cn.javass..Secure * *(..) 任何持有@java.lang.Deprecated和@cn.javass..Secure注解的方法 * (@cn.javass..Secure *).*(..) 任何定义方法的类型持有@cn.javass..Secure的方法
二、
以上是关于Spring 使用介绍—— AOP详解的主要内容,如果未能解决你的问题,请参考以下文章
Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现