栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring boot @reqeustScope

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337250.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号