Bean的五个作用域

一、Singleton

Singleton是单例类型,bean默认就是单例的,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。当开发者定义一个Bean的作用域为单例时,Spring IoC容器只会根据Bean定义来创建该Bean的唯一实例。这些唯一的实例会缓存到容器中,后续针对单例Bean的请求和引用,都会从这个缓存中拿到这个唯一的实例
<bean id="ServiceImpl" class="com.service.ServiceImpl" scope="singleton">

二、Prototype

Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象.
(对有状态的bean应该使用prototype作用域,
对无状态的bean则应该使用singleton作用域)
<bean id=" ServiceImpl " class=" com.service.ServiceImpl " scope="prototype"/>
或者
<bean id=" ServiceImpl " class=" com.service.ServiceImpl " singleton="false"/>

三、request
当一个bean的作用域为Request,表示在一次HTTP请求中,一个bean定义对应一个实例;(每个HTTP请求都会有各自的bean实例,它们依据某个bean定义创建而成)该作用域仅在基于web的Spring

ApplicationContext情形下有效
<bean id="goInt" class= “com.zsl.action.goInt " scope="request"/>
针对每次HTTP请求,Spring容器会根据goInt bean的定义创建一个全新的bean实例,且该goInt bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,不会影响到其他的bean,http请求协议是无连接,无状态的,而其他请求中根据goInt bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request作用域的bean实例将被销毁。

对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

四、session
当一个bean的作用域为Session,表示在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效

<bean id=" goInt " class=" com.zsl.action.goInt " scope="session"/>
针对某个HTTP Session,Spring容器会根据goInt bean定义创建一个全新的bean实例,且该goInt bean仅在当前HTTP Session内有效。与request作用域一样,可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据goInt创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。

对于每次HTTP Session,使用session定义的Bean都产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

五、Global Session
当一个bean的作用域为Global Session,表示在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring

ApplicationContext情形下有效。
<bean id="user" class="com.zsl.user "scope="globalSession"/>
global session作用域类似于标准的HTTP Session作用域, 与session大体相同,但仅在portlet应用中使用。Portlet规范定义了全局session的概念。请求的bean被组成所有portlet的自portlet所共享。
如果不是在portlet这种应用下,globalSession则等价于session作用域。

每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

request,session以及global session这三个作用域都是只有在基于web的SpringApplicationContext实现的(比如XmlWebApplicationContext)中才能使用。
如果开发者仅仅在常规的Spring IoC容器中比如ClassPathXmlApplicationContext中使用这些作用域,那么将会抛出一个IllegalStateException来说明使用了未知的作用域。

借鉴于:
https://blog.csdn.net/jishuizhipan/article/details/79391651
https://blog.csdn.net/fuzhongmin05/article/details/73389779

个人温故学习之用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷偷学习被我发现

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值