簡體   English   中英

AspectJ 開啟多線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM