springmvc 是基于servlet的研发-- 继承frameworkServlet ;spring
那么spring是基于方法的拦截。安全
spring的contorller,默认配置是单例,其中注入的service和dao也是单例。并发
那么咱们一般认为是contorller是线程不安全的。认为spring线程安不安全,得先知道什么是线程安全?mvc
网上有这样一个答案:当多个线程访问某个类时,无论运行时环境采用何种调度方式或者这些线程将如何交替执行,而且在主调代码中不须要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。prototype
那么咱们能够发现有2个问题:线程
1.contorller中出现了公共的非final变量,不一样线程交替赋值;对象
2.单例模式中并发时,对一个东西的并发实例化。继承
使用spring时咱们应该尽可能避免在contorller里使用变量。同步
contorller会在容器启动的时候实例化contorller,注入的对象咱们也尽可能不要懒加载。那么线程的安全问题获得解决。servlet
一个http请求是一个独立的线程,当访问打容器时会建立request对象,隐藏获取到的request也不一样的。
固然若是有须要特殊状况,能够修改contorller的默认属性@Scope("prototype")。这样没错访问都会从新建立contorller增长系统开销。