我对 Aspects 有点陌生,我试图用一个方面来包围一个函数,但我无法调用它。
方法签名如下:
public <T> T get(String uri, List<BasicNameValuePair> nameValuePairs, final Class<T> clazz)
它是在具有完全限定名称的类中定义的:
com.X.Y.infrastructure.rest.RestClient
和方面
@Aspect
public class WebRequestTimeLoggerAspect {
@Around("execution(* com.X.Y.infrastructure.rest.RestClient.get(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("hijacked method : " + joinPoint.getSignature().getName());
System.out.println("hijacked arguments : " + Arrays.toString(joinPoint.getArgs()));
System.out.println("Around before is running!");
Object ret = joinPoint.proceed();
System.out.println("Around after is running!");
return ret;
}
}
我似乎无法找到问题所在。一切都被声明了,spring 将两个 bean 加载到容器中。
如果可能的话。如何在同一个执行减速中添加另一个功能?
谢谢。
更新:
所以我已经取得了一些进展,显然我需要更改项目配置以支持 Aspectj(在 Eclipse 中),但现在我收到以下错误:
applying to join point that doesn't return void: method-execution(java.lang.Object com.X.Y.infrastructure.rest.RestClient.get(java.lang.String, java.util.List, java.lang.Class))
我将假设我需要指定返回参数。我以为 * 会抓住一切,但这似乎是无效的。
那么切入点应该如何寻找这样的泛型呢?
再次感谢
另一个更新
在评论之后,我向该方法添加了一个返回值。但是方面仍然没有触发。
通过请求弹簧配置:
<aop:aspectj-autoproxy />
<bean id="webRequestTimeLoggerAspect" class="com.X.Y.infrastructure.rest.WebRequestTimeLoggerAspect" />
事实上,我认为我不需要为这方面声明一个 bean,因为我有包扫描。但以防万一。