![](/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.