Spring:bean作用域

bean作用域

Spring的默认所有Spring bean都是单例的。但开发人员可以在bean中添加scope属性来修改默认scope值。

范围描述
singleton每个Spring容器只有一个实例(默认值)
prototypebean可以被多次实例化(使用一次就创建一个实例)
requestbean的scope是HTTP请求。每个HTTP请求都有自己的实例。只有在使用有web功能的Spring上下文时才有效
sessionbean的scope是HTTP会话。只有在使用有web功能的Spring ApplicationContext时才有效。
application每个ServletContext有一个实例。
websocket每个WebSocket有一个实例。只有在使用有web功能的Spring ApplicationContext时才有效。

scope定义为singleton时,Spring IoC容器将创建一个由该bean定义的对象实例。该单个实例存储在缓存中,对该bean所有后续请求和引用都将返回缓存中的对象实例。
scope定义为singleton时,Spring IoC容器将在每次对该特定bean进行请求时创建一个新的bean实例。其作用等同于Java的new操作符。
一般,Singleton就可以适用大多数场景了,但某些业务场景(如多线程)需要每次调用生成一个实例,此时scope应设为prototype。
注意: singleton bean引用prototype bean的陷阱。开发人员不能将一个prototype范围的bean注入到自己的singleton bean中,因为这个注入只发生一次,就是当Spring容器正在实例化singleton bean并解析和注入它的依赖时。如果运行时需要多个prototype bean实例,可以采用方法注入的方式,如使用 lookup-method注入replaced-method注入

request、session、application和websocket都只有在基于Web的ApplicationContext实现中才能使用。

此外,还可以自定义scope,只要实现springframework.beans.factory.config.Scope接口即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值