Spring学习笔记2_Bean作用域

文章参考来源:Spring Framework官方文档

Spring框架支持六个作用域,分别为:singleton,prototype,request,session,application,websocket。
其中,后四个只有在你用到web应用时才会遇到,也可创建自定义作用域。

作用域描述
singleton单例模式的作用域,bean的默认作用域。容器只会为其创建一次。< bean id=“accountService” class=“com.something.DefaultAccountService”/>等效于< bean id=“accountService” class=“com.something.DefaultAccountService” scope=“singleton”/>在这里插入图片描述
prototype原型模式的作用域,请求一次创建一次。原则上:对所有有状态bean使用原型作用域,对无状态bean使用单例作用域。在这里插入图片描述
request作用域作用于每次HTTP请求。请求结束,bean也会被丢弃。可以使用配置,也可使用注解@RequestScope 在这里插入图片描述在这里插入图片描述
session作用域作用在HTTP会话级别。和request类似,也可使用配置/注解(@SessionScope)
application作用域作用在ServletContext级别。它和singleton有点相似,但是不太相同的点是:application是ServletContext级别的单例,而singleton是ApplicationContext 级别的单例;并且application是暴露可见ServletContext 属性的
request,session,application,websocket这四种作用域只有在web应用环境中才会用到。使用前可能需要做一些web配置初始化工作,比如RequestContextListener和RequestContextFilter的配置,否则会报异常(Spring Web MVC不需要,因为DispatcherServlet已经帮做了这部分工作。 Servlet 3.0+也不需要,有WebApplicationInitializer)。无论是DispatcherServlet,WebApplicationInitializer,RequestContextListener还是RequestContextFilter,做的都是相同的工作,即:绑定HTTP请求对象到服务该请求的线程,使得请求和会话作用域的bean可以在调用链的更深处使用
  1. 与其他作用域相比,Spring并不管理原型bean的完整生命周期。容器实例化、配置和组装一个原型对象,并将其传递给客户端,而不需要进一步记录该原型实例。因此,尽管初始化生命周期回调方法在所有对象上都被调用,而不管作用域如何,但在原型的情况下,配置的销毁生命周期回调不会被调用。客户端代码必须清理原型作用域对象,并释放原型bean所持有的昂贵资源。要让Spring容器释放由原型作用域bean持有的资源,请尝试使用自定义bean后处理器,它保存了对需要清理的bean的引用。
  2. request,session,application,websocket四种作用域只有在web环境才会用到,如果只是在常规的Spring IoC容器使用,那么会抛出“unknown bean scope”的IllegalStateException 异常
  3. 自定义作用域:需要实现org.springframework.beans.factory.config.**Scope**接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值