[英]AspectJ Opening multiple threads
我正在嘗試使用 AspectJ 進行授權和請求響應日志記錄。 但問題是它打開了兩個線程。 執行我的 controller 和服務方法兩次。 任何幫助將不勝感激。
@Around("execution(* com.a.b.c.controller.*.*(..)) && @annotation(com.a.b.c.role.auth.ReadAuthorization) && args(request,obj)")
public Object before(ProceedingJoinPoint joinPoint,HttpServletRequest request,Object obj) throws Throwable {
Object result = null;
if (!(request instanceof HttpServletRequest)) {
throw new RuntimeException("You are not authorized");
}
LoggingObject loggingObject = new LoggingObject();
loggingObject.setMethodName(MethodSignature.class.cast(joinPoint.getSignature()).getMethod().getName());
loggingObject.setRequestObject(obj);
try{
Object requestObject = joinPoint.proceed();
loggingObject.setResponseObject(requestObject);
log.info(mapperObj.writeValueAsString(loggingObject));
}catch(Exception e){
loggingObject.setResponseObject(e);
log.info(mapperObj.writeValueAsString(loggingObject));
}
if (auth.authorize(request.getHeader("id"),request.getHeader("token"))) {
result = joinPoint.proceed();
return result;
} else {
throw new RuntimeException("You are not authorized");
}
}
我冒着有根據的猜測的風險,即使你在談論線程時這個問題還不清楚(請參閱我在評論中關於如何改進問題的問題):
您的意思可能只是目標方法執行了兩次,而不是方面創建了兩個線程,對嗎? 那么,您的建議方法包含兩個proceed()
調用。 如果自己調用兩次目標方法執行兩次,為什么會感到驚訝呢?
我認為這應該回答你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.