Spring Bean 作用域

本文详细介绍了Spring框架中的Bean作用域,包括singleton、prototype、request、session和application,以及自定义作用域的方法。强调了singleton与application的区别,指出prototype的生命周期管理和清理需额外处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Bean 作用域

来源说明
singleton默认 Spring Bean 作用域,一个 BeanFactory 有且仅有一个实例
prototype原型作用域,每次依赖查找和依赖注入生成新 Bean 对象
request将 Spring Bean 存储在 ServletRequest 上下文中
session将 Spring Bean 存储在 HttpSession 中
application将 Spring Bean 存储在 ServletContext 中

“singleton” Bean 作用域

“prototype” Bean 作用域

Spring 容器没有办法管理 prototype Bean 的完整生命周期,也没有办法记录实例的存在。销毁回调方法将不会执行,可以利用 BeanPostProcessor 进行清扫工作。

“request” Bean 作用域

  • 配置
    • XML - <bean class="..." scope = “request" />
    • Java 注解 - @RequestScope@Scope(WebApplicationContext.SCOPE_REQUEST)
  • 实现
    • API - RequestScope

“session” Bean 作用域

  • 配置
    • XML - <bean class="..." scope = “session" />
    • Java 注解 - @SessionScope@Scope(WebApplicationContext.SCOPE_SESSION)
  • 实现
    • API - SessionScope

“application” Bean 作用域

  • 配置
    • XML - <bean class="..." scope = “application" />
    • Java 注解 - @ApplicationScope@Scope(WebApplicationContext.SCOPE_APPLICATION)
  • 实现
    • API - ServletContextScope

自定义 Bean 作用域

  • 实现 Scope
    • org.springframework.beans.factory.config.Scope
  • 注册 Scope
    • API - org.springframework.beans.factory.config.ConfigurableBeanFactory#registerScope
  • 配置
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
  <property name="scopes">
    <map>
      <entry key="...">
      </entry>
    </map>
  </property>
</bean>

问题

Spring 內建的 Bean 作用域有几种?
singleton、prototype、request、session、application 以及 websocket
singleton Bean 是否在一个应用是唯一的?
否。singleton bean 仅在当前 Spring IoC 容器(BeanFactory)中是单例对象。
application Bean 是否可以被其他方案替代?
可以的,实际上,“application” Bean 与“singleton” Bean 没有本质区别

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值