Возможна ли комбинация @Before и @AfterReturning? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть метод, который будет обновлять поле, но я хочу проверить значение до того, как этот метод будет выполнен, чтобы я мог определить действие (изменить / добавить / удалить).

@Before(value = "execution(* com.test.app.*.service.DefaultBirthRegistrationService.updateRegistrationField(..)) && args(referenceNumber, fieldDetails)")
    public void assignAction(String referenceNumber, BirthRegistrationField fieldDetails) {
        Action action = birthRegistrationService.determineUpdateAction(referenceNumber, fieldDetails, Action.EDITED);
    }

Затем, после успешного выполнения метода updateRegistrationField(), я хочу зарегистрировать событие, но с значением action, установленным в @Before. Я не хочу записать событие в случае сбоя updateRegistrationField(). Вот почему я хочу использовать @AfterReturning. Это код @AfterReturning:

@AfterReturning(pointcut = "execution(* com.test.app.*.service.DefaultBirthRegistrationService.updateRegistrationField(..)) && args(referenceNumber, fieldDetails)")
    public void editEvent(String referenceNumber, BirthRegistrationField fieldDetails) {
        audit(referenceNumber, action, fieldDetails.getName());
    }

Переменной action должно быть значение, назначенное в @Before.

Возможно ли это?

Я также рассмотрел использование @Around, но проблема в том, что я хочу выполнить только часть кода до выполнения метода и часть код после выполнения метода.

1 Ответ

0 голосов
/ 02 апреля 2020

Если DefaultBirthRegistrationService.updateRegistrationField() выдает исключение при сбое операции, следующий код должен работать в вашем случае.

@Around(value = "execution(* com.test.app.*.service.DefaultBirthRegistrationService.updateRegistrationField(..)) && args(referenceNumber, fieldDetails)")
public Object assignActionAndAuditEvent(ProceedingJoinPoint joinPoint,String referenceNumber, BirthRegistrationField fieldDetails) throws Throwable {
    Action action = birthRegistrationService.determineUpdateAction(referenceNumber, fieldDetails, Action.EDITED);
    Object res = joinPoint.proceed();
    audit(referenceNumber, action, fieldDetails.getName());     
    return res;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...