このSOの質問を解決しようとしていたとき...
直面した
Must set property 'expression' before attempting to match
問題は、@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 を使用していましたが、クラスローダーの問題に対処していませんでした...