4

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

4

0 回答 0