繁体   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