Spring aop切入点表达式来访问方法返回类型

时间:2010-06-23 08:55:37

标签: java spring aop spring-aop pointcuts

我有一个包含许多方法的服务接口,所有这些方法都接受一个Request对象并返回一个Response对象。所有请求对象都有一个共同的祖先,所有响应对象都有一个不同的共同祖先(它有一个成功标志和一个消息字段)。

现在,我希望有一个检查权限等的方面,执行服务调用并返回带有失败代码的Response对象(如果有任何失败)。问题是:我需要知道要创建什么类型的Response对象。是否有切入点表达式,使我可以访问返回类型?也许是这样的事情?

@Around(value = "execution(public *"
    + " com.mycompany.MyService+.*(..))"
    + " && args(request)"
    + " && returning( returnType)" // something like this would be nice

, argNames = "request,returnType")
public Object handleServiceCall(final ProceedingJoinPoint pjp,
    final Request request,
    final Class<? extends Response> returnType){ ... }

2 个答案:

答案 0 :(得分:6)

JoinPoint的Javadoc提到了一个getSignature()方法,其返回类型Signature有一个子接口MethodSignature,您可以尝试转换为该方法{{1}这可能就是你要找的东西。

答案 1 :(得分:0)

您可以在around advice方法(在您的情况下为handleServiceCall())中进行检查

Object actuals = pjp.proceed();
if(actuals instanceof MyResponse){
//TO:DO: Your code here
}