49. SpringMVC的控制器是单例的吗?

简介: 49. SpringMVC的控制器是单例的吗?

49. SpringMVC的控制器是单例的吗?


SpringMVC的控制器是单例的吗?

对于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的属性定义多了,都不知道哪个方法用了这个属性,对以后程序的维护还是很麻烦的。

目录
相关文章
|
4天前
Springmvc中提交from之后不跳转不进控制器
Springmvc中提交from之后不跳转不进控制器
19 0
|
4天前
|
前端开发 Java API
Spring Boot之Spring MVC基于注解的控制器(RequestMapping注解类型 重定向与转发 依赖注入)
Spring Boot之Spring MVC基于注解的控制器(RequestMapping注解类型 重定向与转发 依赖注入)
48 0
|
4天前
|
前端开发 Java API
Spring MVC-04循序渐进之基于注解的控制器
Spring MVC-04循序渐进之基于注解的控制器
46 0
|
6月前
|
XML Java 数据格式
SpringMVC控制器单例和多例
SpringMVC控制器单例和多例
|
12月前
|
前端开发 Java Maven
Spring MVC-04循序渐进之基于注解的控制器(下)
Spring MVC-04循序渐进之基于注解的控制器(下)
53 0
|
12月前
|
存储 前端开发 Java
Spring MVC-04循序渐进之基于注解的控制器(上)
Spring MVC-04循序渐进之基于注解的控制器
55 0
Springmvc中提交from之后不跳转不进控制器
Springmvc中提交from之后不跳转不进控制器
47 0
|
JSON 前端开发 数据格式
SpringMVC——控制器方法的返回值类型(ModelAndView、String、void、Object)
SpringMVC——控制器方法的返回值类型(ModelAndView、String、void、Object)
SpringMVC——控制器方法的返回值类型(ModelAndView、String、void、Object)
|
4天前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
4天前
|
Java Apache vr&ar
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
17 0