【49期】面试官——SpringMVC的控制器是单例的吗?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【49期】面试官——SpringMVC的控制器是单例的吗?

点击上方“Java面试题精选”,关注公众号

面试刷图,查缺补漏

号外:****往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅。

对于SpringMVC Controller单例和多例,下面举了个例子说明下.

第一次:类是多例,一个普通属性和一个静态属性。

【49期】面试官:SpringMVC的控制器是单例的吗?

【49期】面试官:SpringMVC的控制器是单例的吗?

结果:


普通属性:0.............静态属性:0
普通属性:0.............静态属性:1
普通属性:0.............静态属性:2
普通属性:0.............静态属性:3

所以说:对于多例情况普通属性是不会共用的,不会产生影响,对于静态属性会去共用这个属性。

第二次:类改为单例

【49期】面试官:SpringMVC的控制器是单例的吗?

结果:


普通属性:0.............静态属性:0
普通属性:1.............静态属性:1
普通属性:2.............静态属性:2
普通属性:3.............静态属性:3

所以说:对于单例情况普通属性和静态属性都会被共用。

第三次:类去掉@Scope注解

【49期】面试官:SpringMVC的控制器是单例的吗?

结果:


普通属性:0.............静态属性:0
普通属性:1.............静态属性:1
普通属性:2.............静态属性:2
普通属性:3.............静态属性:3

所以说:springmvc默认是单例的。

另外在其他方法里面打印

【49期】面试官:SpringMVC的控制器是单例的吗?

输出的结果是

【49期】面试官:SpringMVC的控制器是单例的吗?

跳到别的方法里面也并不会去取初始值,而是再去共用这个属性。

总结

尽量不要在controller里面去定义属性,如果在特殊情况需要定义属性的时候,那么就在类上面加上注解@Scope(“prototype”)改为多例的模式.

以前struts是基于类的属性进行发的,定义属性可以整个类通用,所以默认是多例,不然多线程访问肯定是共用类里面的属性值的,肯定是不安全的,但是springmvc是基于方法的开发,都是用形参接收值,一个方法结束参数就销毁了,多线程访问都会有一块内存空间产生,里面的参数也是不会共用的,所有springmvc默认使用了单例.

所以controller里面不适合在类里面定义属性,只要controller中不定义属性,那么单例完全是安全的。springmvc这样设计主要的原因也是为了提高程序的性能和以后程序的维护只针对业务的维护就行,要是struts的属性定义多了,都不知道哪个方法用了这个属性,对以后程序的维护还是很麻烦的。

留一个问题:那他是线程安全的吗?知道的欢迎留言解答

来源: blog.csdn.net/qq_27026603/article/details/67953879

最近五期

与其在网上拼命找题?** 不如马上关注我们~**

【49期】面试官:SpringMVC的控制器是单例的吗?

原文始发于微信公众号(Java面试题精选):

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【49期】面试官——SpringMVC的控制器是单例的吗?


 上一篇
【48期】盘点Netty面试常问考点——什么是 Netty 的零拷贝? 【48期】盘点Netty面试常问考点——什么是 Netty 的零拷贝?
点击上方“Java面试题精选”,关注公众号 面试刷图,查缺补漏 号外:****往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅。 理解零拷贝 零拷贝是Netty的重要特性之一,而究竟什么是零拷贝呢?WIKI中对其有
2021-04-05
下一篇 
【50期】基础考察——ClassNotFoundException 和 NoClassDefFoundError 有什么区别 【50期】基础考察——ClassNotFoundException 和 NoClassDefFoundError 有什么区别
点击上方“Java面试题精选”,关注公众号 面试刷图,查缺补漏 号外:****往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅。 在写Java程序的时候,当一个类找不到的时候,JVM有时候会抛出ClassNotFo
2021-04-05