使用aspectj的Spring AOP-如何记录内部方法?如何在方面类中包含最终的方法调用?AOP中正确的异常处理

s1ag04yj  于 2023-03-16  发布在  Spring
关注(0)|答案(1)|浏览(97)

我使用Spring AOP进行日志服务,遇到了3个问题:
1.内部方法记录:参考代码:How to Log all the methods public method calls in AOP
1.要在代理中包含final方法:遵循pmd、checkstyle和findbugs中提到的代码标准,我们不能更改方法的final关键字。我尝试了interface和connecting到调用,但都不起作用。
1.处理异常,然后返回到服务本身以获得实际响应

@RestController("/person")
public Person getpersonInfo() {
    try {
        // (...)
        getValidPerson();
        return response; // response including person info
    }
    catch (Exception ex) {
        return response; // response stating the exception condition
    }
}

请附上您的宝贵意见。

5kgi1eie

5kgi1eie1#

1.如果您正在讨论自调用,例如this.someOtherMethod()(没有this.也是一样),那么它将不起作用,因为您没有使用代理,因此您可以配置Spring来公开代理对象,并在调用代理方法之前手动获取对代理的引用,或者您可以从Spring AOP切换到具有加载时编织的AspectJ。
1.从技术上讲,代理在运行时生成一个子类。但是final类不能被扩展,final方法不能被覆盖。因此,你不能用代理来处理它们。同样,如果你认为你需要这样做,切换到完整的AspectJ。
1.这可以在@Around通知中完成,如下所示:

@Around("... your pointcut ...")
public Object myAdvice(final ProceedingJoinPoint thisJoinPoint) throws Throwable {
    System.out.println(thisJoinPoint);
    try {
        return thisJoinPoint.proceed();
    }
    catch (Exception e) {
        e.printStackTrace();
        return "some other object";
    }
}

相关问题