专业编程基础技术教程

网站首页 > 基础教程 正文

24K程序员spring的controller是单例还是多例,居然没搞明白

ccvgpt 2024-07-28 12:12:09 基础教程 7 ℃

计算机软件、编程、Java开发、Spring、程序员

吐槽

面试官:springMVC的controller是单例还是多例

24K程序员spring的controller是单例还是多例,居然没搞明白

程序员:多例

面试官:你可以马上回家等消息了

准备

  • springboot
  • springmvc
  • springbean作用域的单例(默认)、多例
  • 单例bean声明成员变量是线程不安全的(别搞反了)

【Spring MVC】controller之单例模式

配置bean,一个默认(单例),一个多例

默认吧controller的作用域去掉

运行结果

http://localhost:8080/check

调用controller3次方法,两个bean竟然都是一样的

给controller增加作用域多例

运行结果

这下单例bean地址输出一样的

多例bean每次bean输出都不一样了

开发总结

  • SpringMVC的controller默认就是单例的
  • 如果你bean配置多例了,依赖这个bean的bean也需要多例才行啊(看例子)
  • 在单例的bean中切记声明成员属性(如Map、List集合来缓存数据),是线程不安全的

单例bean线程不安全分析(有成员变量情况)

  • 1:写线程同步代码 ,缺点可能会导致性能耗损
  • 2:如果你是springbean,可以scope="prototype" 每次请求多是新对象,就不存在线程安全 缺点可能会导致性能耗损 <bean id="xxxProcessor" scope="prototype" class="com.xxx.xxxProcessor"/>
  • 3:把共享的资源放到方法里,每次方法调用都是新资源(是局部变量嘛) 因此也没线程安全问题了,缺点可能会导致代码复杂度上升

springboot启动图

程序员专家请多多喷我,我哪里不对请指出

Tags:

最近发表
标签列表