SpringMVC Controller单例和多例

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

原文地址:https://www.cnblogs.com/nangonghui/p/8988647.html

时间: 2024-11-12 22:48:35

SpringMVC Controller单例和多例的相关文章

springmvc控制器controller单例问题

springmvc controller默认的是单例singleton的,具体可以查看注解scope可以一目了然. 单例的原因有二: 1.为了性能. 2.不需要多例. 1.这个不用废话了,单例不用每次都new,当然快了. 2.不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例. 我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了. 因此,只要controller中不定义属性,那么单例完全是安全的.下面给个例子

springboot默认创建的bean是单实还是多例

转:https://blog.csdn.net/q1512451239/article/details/53122687 springboot默认创建的bean是单实还是多例 曾经面试的时候有面试官问我spring的controller是单例还是多例,结果我傻逼的回答当然是多例,要不然controller类中的非静态变量如何保证是线程安全的,这样想起似乎是对的,但是不知道(主要是我没看过spring的源码,不知道真正的内在意图)为什么spring的controller是单例的. 先看看sprin

Spring4 In [email protected]单例、多例Bean

Spring In [email protected]单例.多例Bean 代码下载地址:http://download.csdn.net/download/poiuy1991719/9967494 Singleton:单例    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)@Scope("singleton") Prototype:每次注入都会创建新的   @Scope(ConfigurableBeanFactory.SCOPE_PRO

单例和多例的区别

单例和多例的区别 单例多例需要搞明白两个问题:1. 什么是单例多例:2. 如何产生单例多例:3. 为什么要用单例多例4. 什么时候用单例,什么时候用多例:1. 什么是单例.多例:所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 一.单例模式和多例模式说明: 1.         单例模式和多例模式属于对象模式. 2.         单例模式的对象在整个系统中只有一份,多例模式可以有多

Java 单例和多例详解

1. 什么是单例多例:所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action;  2. 如何产生单例多例:在通用的SSH中,单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype";  3. 为什么用单例多例:之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存:之所以用多例,是为了防止并发问题:即一个请求

spring自动注入是单例还是多例?单例如何注入多例?

单例多例需要搞明白这些问题:      1. 什么是单例多例:      2. 如何产生单例多例:      3. 为什么要用单例多例      4. 什么时候用单例,什么时候用多例:   1. 什么是单例.多例: 所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 单例模式和多例模式说明: 1. 单例模式和多例模式属于对象模式. 2. 单例模式的对象在整个系统中只有一份,多例模式可以有

详略。。设计模式2——单例变形(多例).。。。studying

★ 缓存在单例中的使用("单例+缓存"技术) 缓存在编程中使用非常频繁,有着非常关键的数据,它可以帮助程序实现以空间换取时间, 通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类. 说明:该缓存中能够存放多个该类对象,每一个对象以一个key值标识.key值同样时所訪问的是同一个单例对象. ★ 单例变形--多例模式("单例+缓存+控制实例个数"技术) 把上面缓存的单例实现,做成一个可以控制对象个数的共享空间,供整个应用程序使用. 在缓存中维

单例与多例的理解

1. 什么是单例多例:2. 如何产生单例多例:3. 为什么要用单例多例4. 什么时候用单例,什么时候用多例: 1. 什么是单例多例: 所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 2. 如何产生单例多例:     在通用的SSH中,单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype"; 3. 为什么用单例多例:   

IOC的单例和多例

Spring容器在默认情况下管理的bean是单例(singleton)的,即该bean只会创造一个对象,无论之后调用多少次该bean,都只会返回同一个对象. 多例(prototype)模式,每次调用同一个bean,都会创造不同的对象. 实验: 两个实验类: package com.tsvv.pojo; public class Apple { } --------------------------------------- package com.tsvv.pojo; public class