关于Bean的六种作用域


前言

在JavaSE中,我们学习过了全局变量以及局部变量,这里就涉及到了作用域问题,那么什么是作用域呢?

限定程序中变量的使用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域。

而Bean的作用域指的是Bean在Spring整个框架中的某种行为模式比如singleton单域作用域,就表示Bean在整个SPring框架中只有一份,它是全局共享的,如果这个值在一个地方被修改了,那么在另一个地方读取时,就是被修改的值。

接下来,让我们一起来看一看Bean的六种作用域,每种作用域的效果以及每个作用域的使用场景。


一、singleton(单例作用域)

在该作用域下,Bean在IoC容器中只存在着一个实例,无论是获取Bean(即通过applicationContext.getBean等方法获取)还是装配Bean(即通过@Autowired注入)都是同一个对象。

通常情况下,无状态的Bean使用该作用域,无状态指的是Bean对象的属性状态不需要更新。

在Spring框架中,默认使用该作用域。

二、prototype(原型作用域、多例作用域)

在该作用域下,每次对Bean的请求都会创建一个新的实例,无论是获取Bean还是装配Bean,都将是新的实例对象。

通常情况下有状态的Bean使用该作用域。

三、request(请求作用域)

请求作用域,顾名思义,每次http请求都会创建新的Bean实例,类似于prototype。

这个作用域使用于一次http的请求和响应中,同时,是请求和响应所共享的Bean。

这个作用域限定在SpringMVC框架中使用。

四、session(会话作用域)

这个作用域描述的是在一个http session中,定义一个Bean实例。

可用于用户会话的共享Bean,比如:记录一个用户的登录信息。

这个作用域也是限定在SpringMVC框架中使用。

五、application(全局作用域)

这个作用域描述的是在一个http servlet Context中,定义一个Bean实例。

可用于Web应用的上下文信息,比如:记录一个应用的共享信息。

这个作用域也是限定在SpringMVC框架中使用。

六、websocket(HTTP WebSocket作用域)

这个作用域描述的是在一个HTTP WebSocket的生命周期中,定义一个Bean实例。

WebSocket的每次会话中,保存了一个Map结构的头信息,将用来包裹客户端消息头。第一次初始化之后,直到WebSocket结束都是同一个Bean.

这个作用域也是限定在SpringMVC框架中使用。

总结

在普通的Spring项目中,只有前两种作用域,后四种状态的作用域是
SpringMVC中使用的。

除此之外,singleton(单例作用域)和application(全局作用域)看似都是差不多的,那么它们到底有什么区别呢?

  1. singleton是Spring Core的作用域;application是Spring Web中的作用域。
  2. singleton作用于IoC容器,而application作用于Servlet容器。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值