方法拦截器未在测试中调用
Method Interceptor not being called in Test
我的方法拦截器未在测试上下文中调用。测试上下文是为我的测试配置的 class: with @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
when I call a method with MyAnnotation
这永远行不通,无论是在测试中还是在生产代码中。原因很简单:方法拦截器和 @within()
切入点指示符的使用是截然相反的:
@within()
拦截 注释 类 中的所有内容(即在 Spring AOP 方法执行中),而根据您的描述,您想要拦截 注释方法.
解决方案是使用 @annotation(path.to.annotation.MyAnnotation)
并注释所有目标方法,或者继续使用 @within(path.to.annotation.MyAnnotation)
,但注释目标 类。
我的方法拦截器未在测试上下文中调用。测试上下文是为我的测试配置的 class: with @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
when I call a method with
MyAnnotation
这永远行不通,无论是在测试中还是在生产代码中。原因很简单:方法拦截器和 @within()
切入点指示符的使用是截然相反的:
@within()
拦截 注释 类 中的所有内容(即在 Spring AOP 方法执行中),而根据您的描述,您想要拦截 注释方法.
解决方案是使用 @annotation(path.to.annotation.MyAnnotation)
并注释所有目标方法,或者继续使用 @within(path.to.annotation.MyAnnotation)
,但注释目标 类。