表达式中的Spring AOP多重返回类型

时间:2017-10-06 13:45:33

标签: java spring java-8 spring-aop

我正在使用Spring aop并且在我的表达式中只有一个返回类型就好了

<aop:config>
        <aop:pointcut id="webResourceInvocationPointcut"
            expression="execution(public com.es.core.message.ResultOrError com.presentation.resource..*.*(com.es.mus.MUSIn,..))" />
        <aop:advisor pointcut-ref="webResourceInvocationPointcut" advice-ref="resourceChainOfInterceptors" />
    </aop:config>

这里我指定如果请求转到public方法返回类型为com.es.core.message.ResultOrError且方法中的包和参数为com.presentation.resource..*.*(com.es.mus.MUSIn,..))的资源,我想使用aop

但是现在,我不仅允许com.es.core.message.ResultOrError作为返回类型,还允许java.util.concurrent.Future

使用通配符*,但我需要过滤这两种类型。另外一个接一个地添加它不起作用。

我收到此错误

Caused by: java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting '(' at character position 89


[3:47] 
execution(public com.es.core.message.ResultOrError java.util.concurrent.Future scala.concurrent.Future com.presentation.resource..*.*(com.es.mus.MUSIn,..))

知道怎么解决吗?

1 个答案:

答案 0 :(得分:3)

您可以使用||(或)布尔运算符。基于您的堆栈跟踪,您的表达式应该类似于:

expresion= "execution(public com.es.core.message.ResultOrError com.presentation.resource..*.*(com.es.mus.MUSIn,..) || java.util.concurrent.Future com.presentation.resource..*.*(com.es.mus.MUSIn,..)||  scala.concurrent.Future com.presentation.resource..*.*(com.es.mus.MUSIn,..) )"