Необходимо установить свойство 'expression' перед попыткой сопоставления

Когда я пытался решить этот вопрос...

Я столкнулся

Must set property 'expression' before attempting to match

1 ответ

Решение

Проблема была в том, что я не имел значения для pointcut в @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, но я не имел дело с проблемой загрузчика классов...

Другие вопросы по тегам