我是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))
我将假设我需要指定return参数。我认为*会抓住所有,但这似乎是无效的。
那么切点应该如何寻找类似的泛型呢?
再次感谢
另一次更新
在评论之后我已经为方法添加了一个返回值。但方面仍未解雇
按要求弹簧配置:
<aop:aspectj-autoproxy /> <bean id="webRequestTimeLoggerAspect" class="com.X.Y.infrastructure.rest.WebRequestTimeLoggerAspect" />
事实上,我不相信我需要为那个方面声明一个bean,因为我有包扫描。但为了以防万一