Spring AOP supports the following AspectJ pointcut designators (PCD) for use in pointcut expressions:
表 达 式 | 说明 |
execution | 匹配方法执行连接点。我们可以指定包、类或者方法名,以及方法的可见性、返回值和参数类型。这是应用的最为广泛的切入点表达式。例如,execution(* com.apress..TestBean.*(..)表示执行com.apress包中TestBean中的所有方法,无论是何种参数或返回类型 |
within | 匹配那些在已声明的类型中执行的连接点。例如,within(com.apress..TestBean)匹配从TestBean的方法中产生的调用 |
this | 通过用bean引用(即AOP代理)的类型跟指定的类型作比较来匹配连接点。例如,this(SimpleBean)将只会匹配在SimpleBean类型的bean上的调用 |
target | 通过用被调用的bean的类型和指定的类型作比较来匹配连接点。比如target(SimpleBean)将只会匹配在SimpleBean类型bean上方法的调用 |
args | 通过比较方法的参数类型跟指定的参数类型来匹配连接点。例如,args(String, String)将只会匹配那些有两个String类型参数的方法 |
@target | 通过检查调用的目标对象是否具有特定注解来匹配连接点。例如,@target(Magic)将会匹配带有@Magic注解的类中的方法调用 |
@args | 跟args相似,不过@args检查的是方法参数的注解而不是它们的类型。例如,@args(NotNull)会匹配所有那些包含一个被标注了@NotNull注解的参数的方法 |
@within | 跟within相似,这个表达式匹配那些带有特定注解的类中执行的连接点。例如,表达式@within(Magic)将会匹配对带有@Magic注解的类型的bean上方法的调用 |
@annotation | 通过检查将被调用的方法上的注解是否为指定的注解来匹配连接点。例如,@annotation(Magic)将会匹配所有标有@Magic注解的方法调用 |
bean | 通过比较bean的ID(或名称)来匹配连接点。我们也可以在bean名模式中使用通配符。例如,bean("simple")将会匹配ID或名称为simple的bean中的连接点 |
Other pointcut types
The full AspectJ pointcut language supports additional pointcut designators that are not supported in Spring. These are: call, get, set, preinitialization, staticinitialization, initialization, handler, adviceexecution, withincode, cflow, cflowbelow, if, @this, and @withincode. Use of these pointcut designators in pointcut expressions interpreted by Spring AOP will result in an IllegalArgumentException being thrown.
The set of pointcut designators supported by Spring AOP may be extended in future releases to support more of the AspectJ pointcut designators.
* 匹配任意字符,只能匹配一个元素
.. 匹配任意字符 匹配多个元素,在类的路径中匹配任意数量的子包,表示类时要和*联合使用, 在方法中匹配任意数量的参数
+ 匹配任意类型的子类型,作为后缀用在类后
execution() 和 within() 支持所有通配符
args() this() target()只支持+
@args() @within() @target @annotation不支持通配符
可以使用 '&&', '||' and '!' 在xml中&&需要转义,可以用and代替
java.lang.String 匹配String类型
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
未完待续