execution
execution:用于明确指定方法返回类型,类名,方法名和参数名等与方法
//匹配org.gjw包及子包下的所有类的所有方法
@Pointcut("execution( public * org.gjw..*.*(..) )")
public void pointCut(){}
//匹配org.gjw.TestA类下的所有方法
@Pointcut("execution( public * org.gjw.TestA.*(..) )")
public void pointCut(){}
//匹配org.gjw.TestA类下的只有int参数的方法
@Pointcut("execution( public * org.gjw.TestA.*(java.lang.Integer ) )")
public void pointCut(){}
within
within: 表达式的粒度为类,其参数为全路径的类名
within表达式比 execution 低,只能指定到类级别
// 匹配 TestA类内的所有方法
@Pointcut("within( public * org.gjw.TestA )")
public void pointCut();
// 匹配 TestA类内的所有方法
@Pointcut("within( testa )")
public void pointCut(TestA testa);
@within
@within:和 within类似,表示匹配加了某个注解的类
//匹配加了所有 printLog注解的类
@Pointcout("@within(com.spring.annotation.PrintLog)")
public void pointCut();
//匹配加了所有 printLog注解的类
@PointCut( "@within( printLog )" );
public void pointCut( PrintLog printLog);
@annotation
@annotation: 与@within类似,匹配加了指定注解的方法
//匹配加了所有 printLog注解的方法
@Pointcut(" @annotation( com.test.PrintLog )")
public void pointcut();
//匹配加了所有 printLog注解的方法
@Pointcut(" @annotation( printLog )")
public void pointcut( PrintLog printLog );
args
args: 表达式的作用是匹配指定参数类型和指定参数数量的方法,args指定的参数必须是全路径的。
//匹配第一个参数为java.lang.String,最后一个参数为java.lang.Integer的所有方法
@PointCut(" args(java.lang.String,..,java.lang.Integer)")
public void pointCut(){}
//匹配第一个参数为java.lang.String,最后一个参数为java.lang.Integer的所有方法
@PointCut(" args( name,..,age)")
public void pointCut(String name,Integer age){}
@args
@args:用于匹配某个参数加了指定注解的方法
//当方法的参数加了 currUser时匹配
@Pointcut("@args(com.test.CurrUser)")
public void pointCut();
//当方法的参数加了 currUser时匹配
@Pointcut("@args( user )")
public void pointCut(CurrUser user);
参考文档:
spring aop 切点表达式