在Spring MVC Controller中注入HttpServletRequest对象会不会造成线程安全的问题

做法:

1、比如我们在Controller的方法中,通常是直接将HttpServletRequest做为参数,而为了方便节省代码,通常会定义为全局变量,然后使用@Autowire注入。

说明:

1、观察了网上的说法,好像没有统一的解释,有些说会线程安全,有些则说不会。

2、如果按照一些方法进行测试,好像也会出现,而换另一种方法测试,好像也不会出现。

3、可能和Spring的版本有关,导致测试的结果不一样。

4、也有可能方法不对,导致测试结果不一致。

综上结论:

1、如果是最新版本经过严格测试后,不会导致线程安全的问题,那么可以使用。

2、如果Controller默认为单例,那么可以将注入的HttpServletRequest对象不要设置成单例,每次都创建一个,比如@Scope("prototype"),但这样也就放弃了单例的有点。

3、(推荐)按照官方的写法,其实这种做法是不太标准的,如果是规范的做法,那么就在方法的参数上进行使用,安全且符合标准。

简单的测试分析:

参考:

http://blog.csdn.net/albertfly/article/details/52680274

https://segmentfault.com/q/1010000005139036?_ea=803262

https://www.cnblogs.com/abcwt112/p/7777258.html

https://my.oschina.net/sluggarddd/blog/678603?fromerr=XhvpvVTi

http://www.xuebuyuan.com/1628190.html

https://www.cnblogs.com/springsource/p/6728292.html

http://blog.csdn.net/xuexuan_050848/article/details/53843955

原文地址:https://www.cnblogs.com/EasonJim/p/8084845.html