![](/img/trans.png)
[英]How to list all methods annotated with specific annotation in "src/test" path using Reflections?
[英]Invoke annotated aspect on all methods with a specific annotation
我有一个基于 MVC 的应用程序,我想记录所有控制器的输入/输出。
此外,我的每个 controller 方法都带有一些特定的注释(例如: @MyControllerMethod
)。
我写了一个带注释的方面,当我在我的 controller 方法的方面使用注释(例如: LogRequestReply
)时,它可以正常工作。
@Around("@annotation(com.xyz.LogRequestReply)")
public Object logRequestResponse(ProceedingJoinPoint pjp) throws Throwable {
@MyControllerMethod
@LogRequestReply /* It invokes my logRequestResponse method */
public ResponseEntity controllerMethodA(...) {}
但是,我有很多 controller 方法,每个方法都带有注释MyControllerMethod
。
有没有一种方法可以让我的方面注释默认在所有 controller 方法上工作,这样每个方法都会自动调用我的方面记录器并且我可以记录输入/输出?
注意:我还考虑编写一个从HandlerInterceptorAdapter
扩展的拦截器。 但它有其自身的复杂性,即能够记录请求/响应,其中 stream 只能读取一次。
请建议。
一种选择是让@Around 定义的限制更少,通过 package 或类似的东西添加限制。 在内部,您可以通过以下检查检查这是否是 Controller,然后打印请求/响应:
@Pointcut("within(com.mypackage.controller..*)")
private void inControllerPackage() {
}
@Around("inControllerPackage()")
public Object logRequestResponse(ProceedingJoinPoint pjp) throws Throwable {
if (pjp.getSignature().getDeclaringType().isAnnotationPresent(RestController.class)) {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.