Spring AOP и получение результата метода - PullRequest
0 голосов

Я пишу сервис пользовательских метрик с использованием АОП. Вот моя аннотация

@Retention(RUNTIME)
@Target(METHOD)
public @interface Metric {
}

и класс аспекта:

@RequiredArgsConstructor
@Aspect
@Component
@Data
public class MetricAspect {

    Map<Signature, Map<Object, Counter>> metrics = new HashMap<>();

    @AfterReturning("@annotation(Metric)")
    public void afterReturning(JoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        metrics.get(signature).get("Success").increment();
    }
}

Я добавил свою собственную аннотацию к моему методу:

@Override
@Metric
public GetCMOwnerInvoiceResponseDTO getCMOwnerInvoice(GetCMOwnerInvoiceRequestDTO getCMOwnerInvoiceRequest) throws ValidationWebFault_Exception {
    GetCMOwnerInvoiceRequest request = wsConversionService.convert(getCMOwnerInvoiceRequest, GetCMOwnerInvoiceRequest.class);
    GetCMOwnerInvoiceResponse response = invoiceService.getCMOwnerInvoice(request);
    return wsConversionService.convert(response, GetCMOwnerInvoiceResponseDTO.class);
}

Мне нужно добавить результат метода, который является объектом GetCMOwnerInvoiceResponseDTO, на мою карту metrics вместо слова «Success». Какие аргументы или аннотацию мне нужно использовать?

1 Ответ

0 голосов
/ 25 мая 2020

Вы можете использовать атрибут returning

@AfterReturning("@annotation(Metric)" , returning="returnValue")
public void afterReturning(JoinPoint joinPoint, Object returnValue) {
...