需要项目原切面的基础上排除一些类中方法。
本篇文章主要介绍了SpringBoot AOP @Pointcut
切入点表达式,以及如何排除某些类中的方法的方式。
execution(* com.winup.web.controller..*.*(..))
参数说明
符号 | 含义 |
---|---|
execution() | 表达式的主体; |
第一个”*“符号 | 表示返回值的类型任意; |
com.sample.service.impl | AOP所切的服务的包名 |
包名后面的”..“ | 表示当前包及子包 |
第二个”*“符号 | *表示类名,即所有类 |
.*(..) | 表示任何方法名,括号表示参数,两个点表示任何参数类型 |
基本语法格式为: execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)
*
,表示任何返回值,全路径的类名等
*
,代表所有。
set*
, 代表以set
开头的所有方法,
”隔开,各个参数也可以用“*
”来表示匹配任意类型的参数
String
表示匹配一个String
参数的方法;*,String
表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;..
表示零个或多个任意参数其中后面跟着“?”的是可选项。除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。
// 扫描controller层
@Pointcut("execution(* com.winup.web.controller..*.*(..)) ")
public void runningLogPointcat() {
}
// 排除controller类
@Pointcut("execution(* com.winup.web.controller.TempController.*(..)) ")
public void excludePointcut() {
}
//切面配置
@AfterReturning("runningLogPointcat() && !excludePointcut()")
public void saveSysLog(JoinPoint joinPoint) throws IOException {
String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
String methodName = joinPoint.getSignature().getName();
logger.info("{}.{} start", className, methodName);
}
runningLogPointcat
:切入点为controller下所有类。excludePointcut
:切入点为controller下TempController类。saveSysLog
:切入点为满足 runningLogPointcat
且不满足excludePointcut
的切入点的范围