我试图在两种不同路径中的两种不同方法上应用@a方面
class Service1{
public Object applyX(X x){
//code
}
}
class Service2{
public OtherObject applyY(Y y){
//code
}
}
我有我的方面课:
@Aspect
@Component
public class MyProcessor {
@Before("execution(* com.a.b.c.Service1.applyX"
+ " (com.xp.X)) "
+ "&& args(engineEvaluationRequest) || "
+ "execution(* com.a.b.d.Service2.applyY"
+ " (com.yp.Y))"
+ "&& args(y)")
public void process(X x ,Y y){
//code
}
}
我收到一个错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectMapperConfigurer' defined in class path resource [springfox/documentation/spring/web/SpringfoxWebMvcConfiguration.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 inconsistent binding
我不明白到底出了什么问题。我能得到帮助吗?谢谢!
发布于 2017-04-11 11:03:03
错误消息inconsistent binding
已经说过了:您的变量绑定到args()
是不一致的,因为它由于||
(逻辑或)运算符而不明确。可以找到并可以绑定X
或Y
,但另一个将是未定义的。您可能会假设,如果变量没有绑定,则默认为null
,但这一假设是错误的。AspectJ不是那样工作的。切入点必须毫不含糊地将变量绑定到相应的通知参数。
编辑:因为||
是一个逻辑OR,因此是非排他性的(与XOR
不同),甚至可能同时发生两个OR分支匹配的情况。那么,哪个匹配的参数或注释应该被绑定?这确实是模棱两可的。
那你怎么能修好呢?只需使用两个切入点/建议对,而不是一个。如果通知很复杂,并且包含大量代码,则仍然可以将该代码分解为接受JoinPoint
参数的助手方法。
https://stackoverflow.com/questions/43331538
复制相似问题