java—在具有特定注解的所有方法上调用带注解的方面

wrrgggsh  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(404)

我有一个基于mvc的应用程序,我想记录所有控制器的输入/输出。
此外,我的每个控制器方法都有一些特定的注解(例如: @MyControllerMethod ).
我写了一个注解的方面,当我使用注解时,它可以很好地工作(例如: LogRequestReply )从控制器方法的Angular 。

@Around("@annotation(com.xyz.LogRequestReply)")
    public Object logRequestResponse(ProceedingJoinPoint pjp) throws Throwable {
@MyControllerMethod
@LogRequestReply         -> It invokes my `logRequestResponse` method
public ResponseEntity controllerMethodA(...) {}

但是,我有很多控制器方法,每个方法都带有注解 MyControllerMethod .
是否有一种方法可以使我的方面注解在默认情况下在所有控制器方法上工作,以便每个方法自动调用我的方面记录器,并且我可以记录输入/输出?
注:
我还研究了如何编写一个从 HandlerInterceptorAdapter . 但是它有自己的复杂性,能够记录请求/响应,其中流只能读取一次。
请建议。

5gfr0r5j

5gfr0r5j1#

一种选择是让@around定义限制较少,通过包添加限制或类似的内容。在内部,您可以通过下面的检查来检查这是否是控制器,然后打印请求/响应:

@Pointcut("within(com.mypackage.controller..*)")
private void inControllerPackage() {
}

@Around("inControllerPackage()")
public Object logRequestResponse(ProceedingJoinPoint pjp) throws Throwable {
    if (pjp.getSignature().getDeclaringType().isAnnotationPresent(RestController.class)) {
       ...
    }

相关问题