Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBean()切入点不适用于或语句_Java_Spring_Aspectj - Fatal编程技术网

Java SpringBean()切入点不适用于或语句

Java SpringBean()切入点不适用于或语句,java,spring,aspectj,Java,Spring,Aspectj,我正在使用名为bean的特定于Spring的切入点表达式。对于以下表达式,仅捕捉左侧部分: @AfterReturning("bean(FirstService).firstMethod(..) || bean(SecondService).secondMethod(..)") @AfterReturning("bean(SecondService).secondMethod(..) || bean(FirstService).firstMethod(..)") 如果我倒过来,左边的部分又被

我正在使用名为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(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());
}
希望这有帮助