0

このSOの質問を解決しようとしていたとき...

直面した

Must set property 'expression' before attempting to match
4

1 に答える 1

1

問題は、@AfterThrowing注釈にポイントカットの価値がないことでした:

違う

@AfterThrowing(throwing = "ex")
public void intercept(DataAccessException ex) throws Exception {
    //throw DatabaseException
    System.out.println("DAE");
    throw new IllegalArgumentException("DAE");
}

@AfterThrowing(throwing = "ex")
public void intercept(RuntimeException ex) throws Exception {
    //throw ServiceException
    System.out.println("RE - " + ex.getClass());
    throw new IllegalArgumentException("RE");
}

正しい

@AfterThrowing(pointcut = "execution(public * *(..))", throwing = "ex")
public void intercept(DataAccessException ex) throws Exception {
    //throw DatabaseException
    System.out.println("DAE");
    throw new IllegalArgumentException("DAE");
}

@AfterThrowing(pointcut = "execution(public * *(..))", throwing = "ex")
public void intercept(RuntimeException ex) throws Exception {
    //throw ServiceException
    System.out.println("RE - " + ex.getClass());
    throw new IllegalArgumentException("RE");
}

私が見つけた同様の質問は、 AspectJExpressionPointcut が間違った classLoader を使用していましたが、クラスローダーの問題に対処していませんでした...

于 2016-01-05T15:29:00.647 に答える