为什么 Spring 中每个 Bean 都要定义作用域?

本文详细介绍了Spring中Bean的五种作用域(singleton、prototype、request、session、globalSession),强调了它们在不同场景的应用及定义作用域对保护Bean安全的重要性。
摘要由CSDN通过智能技术生成

Spring Bean 作用域的定义

在 Spring 配置中,我们可以通过 scope 属性来定义 Spring Bean 的作用域,可以接受5 个内建的值,分别代表 5 种作用域类型,下面给大家详细总结一下:
  • singleton,用来定义一个 Bean 为单例,也就是说在 Spring loC 容器中仅有唯一的一个实例对象,Spring 中的 Bean 默认都是单例的。它的作用域范围是ApplicationContext 容器
  • prototype,用来定义一个 Bean 为多例,也就是说在每次请求获取 Bean 的时都会重新创建实例,因此每次获取到的实例对象都是不同的。它的作用域范围是调用getBean 方法直至获取对象。
  • request,用来定义一个作用范围仅在 request 中的 Bean,也就是说在每次 HTTP请求时会创建一个实例,该实例仅在当前 Request 中有效。它的作用域范围是每次发起 HTTP 请求直至拿到响应结果。
  • session,用来定义一个作用范围仅在 session 中的 Bean,也就是说在每次 HTTP请求时会创建—个实例,该实例仅在当前 HTTP Session 中有效。它的作用域范围是浏览器首次访问至浏览器关闭。
  • globalSession,用来定义一个作用范围仅在中的 Bean。这种方式仅用于应用环境,也就是说该实例仅存在于 WebApplicationContext 环境中。它的作用域范围是整个 WebApplicationContext 容器。
第一个 singleton 和第二个 prototype 是比较常用的。其他三种仅适用于 Web 应用环境中,咱们也无须关心用什么样的框架,只需要符合 J2EE 规范即可生效。

这一张图呢,是表示各种作用域范围大小对比,其中 prototype 大于 request 大于session 大于 globalSession 大于 singleton。

Spring 为什么要定义作用域?

定义 Bean 的作用域,相当于用户可以通过配置的方式限制 Spring Bean 的使用范围,以起到保护 Bean 安全的作用。 就好比孙悟空外出打妖怪前,给唐僧画了一个圈。唐僧 只有待在圈里才能保证安全,出圈就可能会遇到危险。这样,唐僧访问不到圈外的资源, 圈外的资源也无法触达到唐僧,以此形成一个安全的隔离区。
在日常开发中,我们可以根据业务需要,选择定义不同的作用域,以保护 Bean 的使用安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值