java - Spring AOP 并获取方法的结果

标签 java aop spring-aop

我正在使用 AOP 编写自定义指标服务。这是我的自定义注释

@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 map 中,而不是单词“Success”。我需要使用哪些参数或注释?

最佳答案

您可以使用返回属性

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

关于java - Spring AOP 并获取方法的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62006897/

相关文章:

java - 注释可以获取上下文对象吗?

java - 从先前的 Activity 获取文本并将其添加到另一个 Activity ListView

java - 通知数据集更改后未调用 getview

java - 如果 Spring 中没有 bean,是否有一种简单的方法来 Autowiring 空集合?

c# - 寻找Postsharp老挝的好教程/文档,了解 "Librarian"样本

java - 为 spring AOP 中的方法编写的建议不会进入无限回调

java - 如何在定制的 AOP 顾问程序中获取 HttpServletRequest?

java - Mkdir 创建父目录(如果不存在)

java - 重构方面的异常?

spring - 一个Service方法调用Spring事务的内部多个方法