Bean作用域的种类(Singleton和Prototype的主要区别)

Bean的七大作用域

  1. singleton:唯一bean实例,Spring中的bean默认都是单例的。

  2. prototype:每次请求都会创建一个新的bean实例。

  3. request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP Request内有效。

  4. session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP Session内有效。

  5. global-session:全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。

    Portlet是能够生成语义代码(例如:HTML)片段的小型JavaWeb插件。

    它们基于portlet容器,可以像servlet一样处理HTTP请求。

    但是,与servlet不同,每个portlet都有不同的会话。

  6. application:为每个ServletContext对象创建一个实例,仅在Web相关的ApplicationContext中有效

  7. werbsocket:为每个websocket对象创建一个实例,仅在Web相关的ApplicationContext中有效

我们主要关注singleton和prototype

singleton

spring的默认作用域,就算不在xml的bean上添加scope=“singleton”,也是默认值。这种scope是从始至终bean都是同一个,容器中只有一个固定的bean,每次获取的都是这个bean
例子:
在这里插入图片描述
在这里插入图片描述

prototype

这种scope在每次获取bean时都会新建一个bean实例
例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面我们用DI(Employee注入EmployeeDao)试一试singleton和prototype的区别

在这里插入图片描述

  1. 问:如果employee使用了scope=“prototype”,而employeeDao还是单例,同时获取两个bena会是什么情况?
    答:使用getBean的话,employee是不同的,employeeDao是相同的。用不同的employeeDao调用getEmployee得到的employee是相同的,因为employeeDao是单例,所以就算getBean使用了两次,得到的还是同一个employeeDao
    在这里插入图片描述

  2. 问:如果employeeDao使用了scope=“prototype”,而employee还是单例,同时获取两个bena会是什么情况?
    在这里插入图片描述

  3. 问:如果employee和Dao都使用了scope=“prototype”,同时获取两个bena会是什么情况?
    答:employee各不相同,通过Dao获取的employee不相同,Dao也不相同
    在这里插入图片描述

  4. 全singleton情况
    在这里插入图片描述

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值