方面执行没有触发方法

时间:2013-10-29 15:04:21

标签: java spring aspectj

我是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,因为我有包扫描。但为了以防万一

0 个答案:

没有答案