标签:let tab java sdn http 就是 实例化 pos 执行
对于那些会以多线程运行的单例类(比如spring mvc中的controller,dao,service):
局部变量不会受多线程影响
成员变量会受到多线程影响
如果方法里有成员变量,只有读操作,不受影响;存在写操作,考虑多线程影响值。
例如Web应用中的Servlet,每个方法中对局部变量的操作都是在线程自己独立的内存区域内完成的,所以是线程安全的。
而web中每个请求都是单独的线程,即使同时访问同一个Controller对象,因为并没有修改Controller对象,相当于针对Controller对象而言,只是读操作,没有写操作,因此不需要做同步处理。
Service层、Dao层用默认singleton就行。虽然Service类也有dao这样的属性,但dao这些类都是没有状态信息的,也就是 相当于不变(immutable)类,所以不影响。
这样spring mvc的速度当然比struts2要快,但是也无法使用全局变量。
那么,如果我们要使用全局变量,这里提供2种方式:
第一种将controller的作用域由单例改为原型,在controller上加上注解:
@Controller @Scope("session") public class XxxController{ private List<String> list ; //当bean加载完之后,就会执行init方法,并且将list实例化; @PostConstruct public void init(){ list = new ArrayList<String>(); }
}
参考:https://blog.csdn.net/weixin_33387378/article/details/87933743
标签:let tab java sdn http 就是 实例化 pos 执行
原文地址:https://www.cnblogs.com/xjx199403/p/10691659.html