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

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

吐槽

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

程序员:多例

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

准备

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

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

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

    默认吧controller的作用域去掉

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

    运行结果

    http://localhost:8080/check

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

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

    给controller增加作用域多例

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

    运行结果

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

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

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

    开发总结

  • 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启动图

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

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

    来源:程序汪

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年2月2日
    下一篇 2019年2月2日

    相关推荐