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

Java 访问方法返回类型的Spring aop切入点表达式,java,spring,aop,spring-aop,pointcuts,Java,Spring,Aop,Spring Aop,Pointcuts,我有一个包含许多方法的服务接口,所有这些方法都接受一个请求对象并返回一个响应对象。所有请求对象都有一个公共祖先,所有响应对象都有一个不同的公共祖先(有一个成功标志和一个消息字段) 现在,我希望有一个around方面来检查权限等,执行服务调用,并在出现故障时返回带有故障代码的响应对象。问题是:我需要知道要创建什么类型的响应对象。是否有一个切入点表达式允许我访问返回类型?也许是这样的 @Around(value = "execution(public *" + " com.mycompany

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

现在,我希望有一个around方面来检查权限等,执行服务调用,并在出现故障时返回带有故障代码的响应对象。问题是:我需要知道要创建什么类型的响应对象。是否有一个切入点表达式允许我访问返回类型?也许是这样的

@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){ ... }
@Around(value=“执行(公共)”
+“com.mycompany.MyService+.*(..)”
+“&&args(请求)”
+“&&returning(returnType)”//像这样的东西会很好
,argNames=“请求,返回类型”)
公共对象handleServiceCall(最终处理接合点pjp,
最后请求,

最后一个类您可以在around advice方法(在您的例子中是handleServiceCall())中进行检查


Javadoc for提到了一个
getSignature()
方法,它的返回类型
Signature
有一个子接口,您可以尝试转换它,它有一个方法
getReturnType()
,这可能就是您正在寻找的方法。

我知道,但这不会有帮助,因为我不会总是做pjp。继续()。如果我的方面决定用户无权执行服务调用,它将直接创建响应对象而不继续。不要在切入点表达式中使用“*”作为“ret type pattern”。而是使用要截取的方法的实际返回类型。不好:我想截取许多不同的返回类型是的,我想知道我有哪一个。所以你想建议几个具有相同方面的方法,它们有时需要在不调用服务的情况下生成并返回响应对象,并且响应对象必须是服务方法的正确子类型?是的,这正是我想知道的。这就是我准备的方式如果没有更好的解决方案,我会选择走,但我更喜欢切入点表达式。
Object actuals = pjp.proceed();
if(actuals instanceof MyResponse){
//TO:DO: Your code here
}