簡體   English   中英

Spring / AOP建議隨機失敗

[英]Spring/AOP advice failing randomly

我從兩個方面建議了一些方法,一個是使用spring AOP支持,另一個是BeanPostProcessor (特別是MethodValidationPostProcessor ),它建議使用@Validation批注的所有方法。 對於我的單元測試,我試圖通過破壞方法約定來強制拋出錯誤,但是有時驗證已經到位(上述后處理程序強加的建議),並且有時不起作用。 是否有人經歷過類似的經歷。

這是我要執行的操作的一小段代碼:

方面代碼:

@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注釋注釋的接口(這里是帶有相關信息的鏈接 )。

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

實現此接口的基類:公共抽象類BaseDao實現DAO {@Loggable public Tpersist(T object){...}}

以及具有特定行為的子類:公共最終類UserDao擴展BaseDao {@Loggable public T findById(User object){...}}

春天的背景終於像這樣

<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,捕捉通話中的錯誤。

到處挖掘,我發現問題與我放置注釋的位置有關。 抱歉給你帶來不便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM