【问题标题】:Spring/AOP advice failing randomlySpring/AOP 建议随机失败
【发布时间】:2012-08-15 15:41:20
【问题描述】:

我从两个方面推荐了一些方法,一个是使用spring AOP支持,另一个是BeanPostProcessor(特别是MethodValidationPostProcessor),它建议所有带有@Validation注释的方法。在我的单元测试中,我试图通过破坏方法契约来强制抛出错误,但有时验证已经到位(上述后处理器强加的建议),有时不起作用。有没有人经历过类似的事情。

这是我正在尝试做的一个小sn-p:

方面代码:

@Aspect
@Component
public final class LoggingAspect {
    @Before(value = "execution(public * * (..)) && @annotation(loggable)",
    argNames = "joinPoint, loggable")
    public void before(JoinPoint joinPoint, Loggable loggable) {
         //logging here... 
    }
}

注解(可记录代码)

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Loggable {...}

使用@Validated 注解注解的接口(这是带有相关信息的link)。

@Validated
public interface Dao<T, K> {
    T findById(@NotNull K id);
    T persist(@NotNull T object);
}

实现此接口的基类: 公共抽象类 BaseDao 实现 DAO { @Loggable 公共T坚持(T对象){...} }

还有一个具有特定行为的子类: 公共最终类 UserDao 扩展 BaseDao { @Loggable public T findById(用户对象){...} }

春天的上下文终于是这样了

<aop:aspectj-autoproxy/>
<context:annotation-config/>
<context:component-scan base-package="com.my.package"/>
<bean id="validator"
  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

我正在通过以 null 作为参数调用这两种方法进行测试,但在某些情况下,我收到了 IllegalArgumentException: attempt to create saveOrUpdate event with null entity 而不是 MethodConstraintViolationException 应该由 取而代之的是 MethodValidationInterceptor,它建议/拦截 @Validated 注释接口的所有公共方法。

编辑:我使用的是 spring 3.1、Hibernate Validator 4.2(根据 spring 的要求)和 aspectj 1.7。

编辑 2:我对测试代码进行了更多挖掘,发现与 MethodValidationPostProcessor 或 MethodValidationInterceptor 相关的一些奇怪的东西。我在测试期间禁用了 aop-autoproxy 并删除了 LoggerAspect,但仍然存在一些问题,即在某些情况下验证导致了我的预期,在其他一些情况下,即使它应该失败 MethodValidationInterceptor 或 MethodValidator 失败捕获调用中的错误。

【问题讨论】:

    标签: java spring aop spring-aop


    【解决方案1】:

    四处挖掘我发现问题与我放置注释的位置有关。很抱歉给您带来不便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多