spring boot @reqeustScope

需求:

  • 在请求中获取图片下载时间信息,并在最后打印出来
  • 我这边使用的是aop 的日志打印方式,也就是他是独立于代码逻辑之外的地方统一打印log

进程:

  • 获取时间简单,只要在下载的前后做一个时间戳减一减就可以了问题是怎么把这个时间传递到最后
  • 当然最简单的,包在一个地方一层层的传递上去,但是这个方法太麻烦了,而且很有可能会引发其他的bug
  • 找到一个注释,@requestScop,加了这个注释之后,在整个请求链路上都唯一存在的bean 也就是生命周期就是单次请求,那完美符合我的要求
  • 创建一个scop
    import lombok.Data;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.annotation.RequestScope;
    
    @Component
    @RequestScope
    @Data
    public class RequestInitScope {
      private String requestId;
      private long downloadFileTime;
    }
    
  •  在aop 和 下载图片的地方注入这个scop
    //这个构造函数很重要
    @RequiredArgsConstructor
    public class WebLogAspect {
    
        private static ObjectMapper mapper;
    
        private final RequestInitScope requestInitScope;
    。。。。。。。
    }
  •  然后直接在对应的地方 调用 requestInitScope.getDownloadFileTime()
  • 完美而优雅

拓展:

  • 除了reqeustScope 还有 sessionScope,applicationScope
  • 当使用@Async 的时候,requestScope 的注入会失败要注意做try catch
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值