测试中未调用方法拦截器



在测试上下文中没有调用我的方法拦截器。测试上下文是为我的测试类配置的:使用@ContextConfiguration(locations = {"classpath:testContext.xml"}),我有一个方法拦截器:

public class MyMethodInterceptor implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("invocation >>>> " + invocation);
}

它在我的context.xml文件中配置如下:

<bean id="myMethodInterceptor" class="path.to.interceptor.MyMethodInterceptor"/>
<aop:config>
<aop:advisor pointcut="@within(path.to.annotation.MyAnnotation)"
advice-ref="myMethodInterceptor" order="10"/>
</aop:config>

我的期望是在我的测试中,当我用MyAnnotation调用一个方法时,会调用拦截器,但不会。我正在使用JUnit 4.12

当我用MyAnnotation调用方法时

无论是在测试中还是在生产代码中,这都不会起作用。原因很简单:方法拦截器和@within()切入点指示符的使用是截然相反的:

@within()截取带注释的类内的所有内容(即在Spring AOP方法执行中(,而根据您的描述,您希望截取带注释的方法

解决方案是使用@annotation(path.to.annotation.MyAnnotation)并注释所有目标方法,或者继续使用@within(path.to.annotation.MyAnnotation),但改为注释目标类。

相关内容

  • 没有找到相关文章

最新更新