Java SpringBean()切入点不适用于或语句
我正在使用名为bean的特定于Spring的切入点表达式。对于以下表达式,仅捕捉左侧部分:Java SpringBean()切入点不适用于或语句,java,spring,aspectj,Java,Spring,Aspectj,我正在使用名为bean的特定于Spring的切入点表达式。对于以下表达式,仅捕捉左侧部分: @AfterReturning("bean(FirstService).firstMethod(..) || bean(SecondService).secondMethod(..)") @AfterReturning("bean(SecondService).secondMethod(..) || bean(FirstService).firstMethod(..)") 如果我倒过来,左边的部分又被
@AfterReturning("bean(FirstService).firstMethod(..) || bean(SecondService).secondMethod(..)")
@AfterReturning("bean(SecondService).secondMethod(..) || bean(FirstService).firstMethod(..)")
如果我倒过来,左边的部分又被抓住了:
@AfterReturning("bean(FirstService).firstMethod(..) || bean(SecondService).secondMethod(..)")
@AfterReturning("bean(SecondService).secondMethod(..) || bean(FirstService).firstMethod(..)")
如果我写:
@AfterReturning("bean(SecondService).secondMethod(..)")
和@AfterReturningbeanFirstService.firstMethod。。有两种方法
然后两者都起作用了。
第一个OR语句有什么问题?此切入点表达式不能按预期工作的原因是它不正确。Spring框架没有抛出任何异常,因为这是另一个例外 导致混乱的原因 根据Spring参考文档部分,声明bean切入点指示符的正确方法如下 豆角 idOrNameOfBean标记可以是任何SpringBean的名称 像下面代码这样的方面是定义方面的正确方法,它将拦截两个bean的所有方法调用
@Component
@Aspect
public class BeanAdviceAspect {
@AfterReturning("bean(firstService) || bean(secondService)")
public void logMethodCall(JoinPoint jp) {
System.out.println(jp.getSignature());
}
}
切入点表达式beanfirstService.firstMethod不正确,框架似乎在beanfirstService之后丢弃了任何内容,这就是当声明被反转时测试用例行为不同的原因
要确认此行为,请执行以下方面
@Component
@Aspect
public class BeanAdviceAspect {
@AfterReturning("bean(firstService).firstMethod() || bean(secondService)")
public void logMethodCall(JoinPoint jp) {
System.out.println(jp.getSignature());
}
}
出于上述原因,还将建议方法firstService.thirdMethod
声明bean切入点指示符的另一种方法如下所示。这与任何与通配符表达式匹配的Springbeans名称中的方法执行相匹配
@AfterReturning("bean(*Service)")
public void logMethodCall(JoinPoint jp) {
System.out.println(jp.getSignature());
}
希望这有帮助此切点表达式不能按预期工作的原因是它不正确。Spring框架没有抛出任何异常,因为这是另一个例外 导致混乱的原因 根据Spring参考文档部分,声明bean切入点指示符的正确方法如下 豆角 idOrNameOfBean标记可以是任何SpringBean的名称 像下面代码这样的方面是定义方面的正确方法,它将拦截两个bean的所有方法调用
@Component
@Aspect
public class BeanAdviceAspect {
@AfterReturning("bean(firstService) || bean(secondService)")
public void logMethodCall(JoinPoint jp) {
System.out.println(jp.getSignature());
}
}
切入点表达式beanfirstService.firstMethod不正确,框架似乎在beanfirstService之后丢弃了任何内容,这就是当声明被反转时测试用例行为不同的原因
要确认此行为,请执行以下方面
@Component
@Aspect
public class BeanAdviceAspect {
@AfterReturning("bean(firstService).firstMethod() || bean(secondService)")
public void logMethodCall(JoinPoint jp) {
System.out.println(jp.getSignature());
}
}
出于上述原因,还将建议方法firstService.thirdMethod
声明bean切入点指示符的另一种方法如下所示。这与任何与通配符表达式匹配的Springbeans名称中的方法执行相匹配
@AfterReturning("bean(*Service)")
public void logMethodCall(JoinPoint jp) {
System.out.println(jp.getSignature());
}
希望这有帮助