对于SpringMVC Controller单例和多例,下面举了个例子说明下.
第一次:类是多例,一个普通属性和一个静态属性。


结果:普通属性:0.............静态属性:0
普通属性:0.............静态属性:1
普通属性:0.............静态属性:2
普通属性:0.............静态属性:3
因此说:对于多例状况普通属性时不会共用的,不会产生影响,对于静态属性会去共用这个属性。
第二次:类改成单例

结果:普通属性:0.............静态属性:0
普通属性:1.............静态属性:1
普通属性:2.............静态属性:2
普通属性:3.............静态属性:3
因此说:对于单例状况普通属性和静态属性都会被共用。
第三次:类去掉@Scope注解

结果:普通属性:0.............静态属性:0
普通属性:1.............静态属性:1
普通属性:2.............静态属性:2
普通属性:3.............静态属性:3
因此说:springmvc默认是单例的。
另外在其余方法里面打印

输出的结果是

跳到别的方法里面也并不会去取初始值,而是再去共用这个属性。
最终:尽可能不要在controller里面去定义属性,若是在特殊状况须要定义属性的时候,那么就在类上面加上注解@Scope("prototype")改成多例的模式,之前struts是基于类的属性进行发的,定义属性能够整个类通用,因此默认是多例,否则多线程访问确定是共用类里面的属性值的,确定是不安全的,可是springmvc是基于方法的开发,都是用形参接收值,一个方法结束参数就销毁了,多线程访问都会有一块内存空间产生,里面的参数也是不会共用的,全部springmvc默认使用了单例,因此controller里面不适合在类里面定义属性,只要controller中不定义属性,那么单例彻底是安全的。springmvc这样设计主要的缘由也是为了提升程序的性能和之后程序的维护只针对业务的维护就行,要是struts的属性定义多了,都不知道哪一个方法用了这个属性,对之后程序的维护仍是很麻烦的