我正在尝试使用AspectJ规范化应用程序中的URI。我想捕获对传入java.net.URI参数的方法的每次调用。
一个简单的切入点就像这样: public pointcut uriMethod(URI uri):call(* *(..))&& ARGS(URI);
但是,这似乎只匹配只有一个参数(URI)的方法签名。我可以将args部分更改为“args(uri,..)”,但这仅适用于具有多个参数的方法(丢失单参数签名),并且仅适用于第一个参数是URI。
是否可以构建一个切入点来覆盖所有情况: public void exampleMethod1(URI uri); public void exampleMethod2(URI uri,String s); public void exampleMethod3(int i,URI uri); public void exampleMethod4(float f,URI uri,short s);
如果可以使用相同的切入点捕获多个URI,则获得奖励积分: public void exampleMethod5(URI uri1,URI uri2);
我也对替代路线持开放态度。也许我需要基于URI类本身的东西,而不是传递给它的类?
答案 0 :(得分:1)
此切入点表达式将满足您的第一个条件:
execution(* *(..,java.net.URI,..))
然后在建议中,使用joinpoint浏览args,获取带有URI作为实例的arg - 这种类型满足您的第二个条件:
@Around("methodsWithURI()")
public void aroundMethodsWithURI(ProceedingJoinPoint joinpoint){
for(Object objArg: joinpoint.getArgs()){
if (objArg instanceof URI){
System.out.println(objArg);
}
}
}