切面表达式主要由三部分组成:
execution(<修饰符>? <返回类型> <包名>?<方法名>(<参数>)异常?)
execution(
modifier-pattern?
returnType-pattern
package-pattern?
methodName-pattern(args-pattern)
throwException-pattern?
)
execution(*[修饰符]? *[返回值] *[包路径]?*[方法名](..[参数])throw *[异常类]?)
//匹配所有public修饰的方法
@Pointcut("execution(public * **(..))")
public void exTest1(){}
//匹配所有String或者void返回值的方法
@Pointcut("execution(String||void **(..))")
public void exTest2(){}
//com包下的所有类的方法
@Pointcut("execution(* com.*.*(..))")
public void exTest3(){}
//如果不使用..匹配到了类级别的名字,需要类.方法名.............
//com包下的所有子包的所有类的方法
@Pointcut("execution(* com..*(..))")
public void exTest4(){}
//com包下的所有子包的ProductService类的方法
@Pointcut("execution(* com..ProductService.*(..))")
public void exTest5(){}
//匹配所有test名字开头的方法
@Pointcut("execution(* test*(..))")
public void exTest6(){}
//匹配所有包含test名字的方法
@Pointcut("execution(* *test*(..))")
public void exTest7(){}
//匹配所有参数列表的方法
@Pointcut("execution(* *(..))")
public void exTest8(){}
//匹配无参数列表的方法
@Pointcut("execution(* *())")
public void exTest9(){}
//匹配所有抛过异常的方法
@Pointcut("execution(* *()throws *)")
public void exTest10(){}
//只匹配所有抛出空指针异常的方法
@Pointcut("execution(* *()throws NullPointerException)")
public void exTest11(){}
//匹配所有使用了AspectAnnotation注解的类的所有方法(要求注解的RetentionPolicy的级别为RUNTIME)
@Pointcut("@target(com.tiglle.manage.AspectAnnotation)")
public void targetMatch(){}
//匹配所有使用了AspectAnnotation注解为参数的方法
@Pointcut("@args(com.tiglle.manage.AspectAnnotation)")
public void argsMatch(){}
//匹配所有使用了AspectAnnotation注解的类的所有方法(要求注解的RetentionPolicy的级别为CLASS)
@Pointcut("@within(com.tiglle.manage.AspectAnnotation)")
public void withinMatch(){}
//方法注解匹配,匹配所有带AspectAnnotation注解的方法
@Pointcut("@annotation(com.tiglle.manage.annotation.AspectAnnotation)")
public void test(){
}
//匹配TestService类中的所有方法
@Pointcut("within(com.tiglle.service.TestService)")
public voud test(){}
//匹配com/tiglle/包下所有包和子包中的类中的所有方法
@Pointcut("within(com.tiglle..*)")
public voud test(){}
//匹配代理对象和普通对象及其所有子类的方法
@Pointcut("this(com.tiglle.manage.service.ProductService)")
public void thisMatch(){
}
//根据spring容器的bean的名称(id)匹配,(不匹配子类)
@Pointcut("bean(productService)")
public void beanMatch(){
}
//匹配目标对象和普通对象及其所有子类的方法
@Pointcut("target(com.tiglle.manage.service.ProductService)")
public void targetMatch(){
}
//匹配spring容器所有此参数类型和列表的方法(String,Long)
@Pointcut("args(String,Long)")
public void argsMatch(){}
//匹配spring容器所有此参数类型和列表的方法(第一个为Long,后面随意)
@Pointcut("args(Long,..)")
public void argsMatch2(){}