java学习-springaop AOP-execution格式说明
郑重声明: 本文首发于人工博客
1、参数说明
示例
execution(* com._94rg.method.ces..*.*(..))
标识符 | 含义 |
---|---|
execution() | 表达式的主体 |
第一个“*”符号 | 表示返回值的类型任意 |
com._94rg.method.ces | AOP所切的服务的包名,即,需要进行横切的业务类 |
包名后面的“..” | 表示当前包及子包 |
第二个“*” | 表示类名,*即所有类 |
.*(..) | 表示任何方法名,括号表示参数,两个点表示任何参数类型 |
2、springaop的应用
- 方法耗时监控
- 出参、入参打印
- 全局异常拦截
- mock三方jar中的调用
3、代码分享
@Order(0)
@Aspect
@Component
@Slf4j
public class EsAspect {
@Value("${testingMode:false}")
private boolean testingMode;
@PuppeteerConfigChangeListener
private void configChangeListener(ConfigChangeEvent changeEvent) {
if (changeEvent.isChanged("testingMode")) {
testingMode =
Boolean.parseBoolean(
changeEvent.getChange("testingMode").getNewValue());
log.info("当前的测试模式开关为:{}", testingMode);
}
}
/**
* 定义一个切入点
*/
@Pointcut("execution(public * com._94rg.DocSearchApi.*(..))")
private void doAspect() {
}
@Around("doAspect()")
public Object methodMonitor(ProceedingJoinPoint pjp) throws Throwable {
if (testingMode) {
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
Class type = methodSignature.getReturnType();
if (type != Void.TYPE) {
return type.newInstance();
}
} else {
return pjp.proceed();
}
return null;
}
}
版权声明:本文为人工博客的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接:https://www.94rg.com/article/1734
.