java AspectJ:基于参数值的拦截方法
我正在使用AspectJ拦截一个名为Request(String, String)
的方法。为此,我使用自己指定的(标记)注释。这就是课堂的样子:
Class myclass {
public void Request(@Intercept String t, String u) {
// ...
}
}
拦截@Intercept
注释的方面:
@Aspect
class someAspect {
@Intercept
@Around("execution(public * * (@Interceptor (*), ..))")
public void capture(ProceedingJoinPoint pjp) {
// ...
}
}
然而,我的方面是基于带注释的参数进行拦截。但是我想让方面截取参数t包含的特定值上的方法请求
例如,如果t == "t1"
,则必须拦截该方法,否则不能
我想知道是否有可能在AspectJ中实现这一点(与Spring AOP结合使用)
# 1 楼答案
实际上,您的代码存在一些问题(我只是重新格式化了它,使其至少可读):
MyClass
或SomeAspect
而不是myclass
或someAspect
李>request
而不是Request
李>@Intercept
和@Interceptor
。从现在开始,我假设我们只处理一个叫做@Intercept
的问题,好吗李>@Intercept
注释了aspect的建议,但我猜这不是故意的,是吗?如果拦截建议正在拦截自身,则可能会在另一个切入点中导致无限递归李>至于你的实际问题,那么答案是:某种程度上,但不是静态地在切入点内(因为参数只在运行时确定),而是动态地,也在运行时。你有两个选择:
选项A:
if
-else
在建议代码中选项B:使用
if()
切入点^{} pointcut 是一个静态方法,根据要测试的动态条件返回布尔值。重构方面如下所示:
如您所见,动态的、基于参数的条件已经转移到切入点,它不再是一个带有空主体的
void
方法,而是一个返回参数检查结果的boolean
方法。此外,切入点表达式前面有一个if() &&
表达式控制台日志:
两种方面的控制台输出完全相同: