请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

RequestHolder中定义requestHolder疑问?

老师请教下,我理解ThreadLocal这个线程变量是去封装spring容器中有状态的bean的非共享变量,以保证并发时,线程都能拿到同一份成员属性。
你的处理,我理解就是给当前的线程创建个全局的变量,user信息不存在session可以理解,但是一次http请求,都会启一个线程,Servlet容器都会创建HttpRequest,编码时都能取到,不存在你说的需要传输(即使传输也是容器在处理),而且你也只在requestHolder取ip,而后面拦截器 Jsp里用的还是原始的httpRequest,请问requestHolder定义是否多余了?理解有误的地方,烦请老师指出,谢谢

正在回答 回答被采纳积分+3

1回答

Jimin 2018-10-15 08:25:29

你好,你应该是没完全理解他的好处,他确实相当于是给每个线程定义个全局变量,利用线程封闭保证并发时的线程安全。这里这样设计,是不需要把request及user等一直在方法间传输,课程里演示的代码层级属于比较简单的,复杂一点的相信你也见过,可能会有好几层甚至十几层、几十层,通过这个holder,就可以不用在每个方法定义时带上request和user这个参数,而且是随时想用随时就可以拿出来用。
通过这个holder,既能保证线程安全,又可以保证方法定义简单,任何一个方法想使用这个关键变量,都不再需要把他的调用层级上都加上这个参数,相比常规的需要增加一个核心参数就在方法定义上增加一个要好很多,不至于出错,也不用担心会不会某一层拿不到给了个null

1 回复 有任何疑惑可以回复我~
  • 这样设计确实很好,就当前实现而言,无论在哪个方法中需要user和request对象时,都可以直接使用,避免传多个参。学到了
    回复 有任何疑惑可以回复我~ 2020-04-06 23:26:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信