springmvc httprequest 使用@Autowired注解我一直有个疑问,就是注解后每次的httprequest 是不是都一样的了,然后会不会引发多线程问题?

代码如下:

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class TestController{ @Autowired
HttpServletRequest request1;//这样使用,request1每次进来都是Current Request @RequestMapping("/test1")
public void test(){
System.out.println("test1request1:"+request1.hashCode());
System.out.println("test1"+request1.getParameter("name"));
} @RequestMapping("/test2")
public void test2(String name){
System.out.println("request2request2:"+request1.hashCode());
System.out.println("test2"+request1.getParameter("name"));
} @RequestMapping("/test3")
public void test3(HttpServletRequest request){
//这样进来request每次都不一样
System.out.println("request:"+request1.hashCode()); } }

springmvc常见注入HttpServletRequest 是使用方法级别注入的,它的基本思想是一个请求就是一个新实列HttpServletRequest,所以不会出现所谓多线程问题,毕竟是局部变量控制了。

而我们使用@Autowired来注入一个全局实例是否会出现多线程问题?跟踪源码,发现当前注入每次Current Request,然后这个request其实保存在一个ThreadLocal中的,这样其实它的底层实现方法就是针对每次来的request都保存在一个ThreadLocal中,然后去取,所以这样写代码是没有问题的。

总结一下两种写法都没有问题。但是用得最多的是第一种写法,毕竟我们还是要顺着springmvc的设计初衷考虑,还有从多线程设计思路及代码思路考虑,尽量不要用全局变量。因为这容易引入并发问题......

最新文章

  1. Node基础篇(概要)
  2. Android -- 使用ViewPager实现画廊效果
  3. StackOverflowError 和 OutOfMemoryError
  4. Apache 目录权限
  5. Application.EnableVisualStyles();
  6. 从汇编看c++中指向成员变量的指针(一)
  7. 每日一帖示例程序(使用TWebBrowser基于HTML做)
  8. linux上安装配置samba服务器
  9. Centos 7.3 安装配置 PostgreSQL 9.x
  10. [学习OpenCV攻略][002][Ubuntu下OpenCV安装]
  11. UNIX网络编程——SOCKET API和TCP STATE的对应关系_三次握手_四次挥手及TCP延迟确认
  12. 脚本添加crontab任务
  13. 获取Vue的实例方法
  14. 关于《common-net》的ftp上传
  15. python全栈开发day71-ajax
  16. post方式接口测试(二)_参数化
  17. PHP 获取给定时间的周日时间或月末时间或每天
  18. [js] Array.slice和类数组转数组
  19. :代理模式:proxy
  20. shell环境变量

热门文章

  1. 《java编程思想》:第五章,初始化与清理
  2. 机器学习:simple linear iterative clustering (SLIC) 算法
  3. PS 滤镜— —水波效果
  4. 「BZOJ2721」「LuoguP1445」 [Violet]樱花(数论
  5. Happy Great BG-卡精度
  6. 使用superobject 新建Json数据(数组)
  7. asp.net mvc cookie超时返回登录页面问题
  8. 双击jar不能运行的解决方法
  9. 微信小程序开发之下拉菜单
  10. array mysql_fetch_row(resource result)