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的设计初衷考虑,还有从多线程设计思路及代码思路考虑,尽量不要用全局变量。因为这容易引入并发问题......

springmvc httprequest 使用@Autowired注解的更多相关文章

  1. 解决 SpringMVC 非spring管理的工具类使用@Autowired注解注入DAO为null的问题

    在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在Controller层中注入service接口,在service层中注入其它的s ...

  2. springmvc入门基础之注解和参数传递

    一.SpringMVC注解入门 1. 创建web项目2. 在springmvc的配置文件中指定注解驱动,配置扫描器 <!-- mvc的注解驱动 --> <mvc:annotation ...

  3. Spring@Autowired注解

    @Autowired注解可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作. 注意:@Autowired默认是按照类型来注入的. 看下面的例子:例子是以对成员变量(field)为例进行的 p ...

  4. 常见的springmvc、SpringBoot的注解

    springMvc的常用注解 : @Controller :用于标记在一个类上,使用它标记的类就是一个springmcv Controller对象,分发处理器将会扫描使用了该注解 的类的方法,并检测该 ...

  5. 解决非controller使用@Autowired注解注入为null问题

    在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在controller层中注入service接口,在service层中注入其它的s ...

  6. SpringMVC的 几个注解

    1.@RequestMapping: 是一个用来处理请求地址映射的注解,可用于类或方法上. 1):用在类上:是父路径. 2):用在方法上:是子路径. @Controller //设置想要跳转的父路径 ...

  7. Spring5:@Autowired注解、@Resource注解和@Service注解

    什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...

  8. @Autowired注解的使用

    使用Spring时,通过Spring注入的Bean一般都被定义成private,并且要有getter和setter方法,显得比较繁琐,增加了代码量,而且有时会搞忘造成错误. 可以使用@Autowire ...

  9. 【Java EE 学习 83 下】【SpringMVC】【使用注解替代已过时的API】【SpringMVC、Hibernate整合】

    一.SpringMVC中注解的使用 1.为什么要使用注解 之前曾经提到过的三种控制器在spring3.0中都已经被明确标记为过时了,spring3.0推荐使用注解的方式替代三种控制器,实际上使用注解的 ...

随机推荐

  1. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  2. Spring MVC 中/和/*的区别

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...

  3. k8s-flannel容器集群网络部署

    [root@k8s-master src]# wget https://github.com/coreos/flannel/releases/download/v0.9.1/flannel-v0.9. ...

  4. ubuntu强制卸载软件

    以卸载cups为例子 一:列出软件列表,找到需要卸载的软件的名字命令:dpkg --list

  5. 【Lintcode】075.Find Peak Element

    题目: There is an integer array which has the following features: The numbers in adjacent positions ar ...

  6. js 图片上传

    可能很多不熟悉的图片上传的同学会觉得有点懵,其实做过一次你就会发现特别的简单. 只是一个formData格式的表单提交,把地址写到 action = "" 里面就可以了,当然你可以 ...

  7. 基于bootsplash的嵌入式linux启动画面定制

    来源: ChinaUnix博客 作者: ChinaUnix博客 发布时间:2007-01-01 16:29:00 摘 要:在基于linux的嵌入式仿真平台研发中,利用开源工具bootsplash能够定 ...

  8. centos6.5下PF_RING安装方法

    参考的是这个大牛的文章:http://blog.csdn.net/fan_hai_ping/article/details/6705170 系统环境:centos6.5 开发版 PF_RING版本:P ...

  9. IIS7启用GZip压缩

    本文转载自 http://www.cnblogs.com/kissdodog/p/6252129.html GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加, ...

  10. Mysql多列索引经典案例

    一个经典的多列索引案例,如题: 假设某个表有一个联合索引(c1,c2,c3,c4)一下--只能使用该联合索引的 c1,c2,c3 部分 Awhere c1=x and c2=x and c4>x ...