【Spring4.0笔记整理六】Bean的作用域

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/80261225

  我们在前几章讲的都是在创建 IOC容器 的时候就实例化所有的 单例Bean,这一点我们在讲使用 XML配置 Bean 的时候就提到过。其实我们之前使用的 Bean 都是单例的,也就是每次从 IOC容器 中取出的 Bean 其实都是同一个对象。
  
  我们可以验证一下,假设 IOC容器 中有一个名字叫 car 的 Bean:

Car car = (Car) ioc.getBean("car");
Car car2 = (Car) ioc.getBean("car");
car == car2;  // 返回:true

  默认情况下,Spring 只为每个在 IOC 容器 里声明的 Bean 创建唯一一个实例,整个 IOC容器 范围内都能共享该实例。我们使用 getBean() 方法和 Bean 引用都将返回这个唯一的 Bean 实例。我们把这个 Bean 的作用域称为 singleton,它是所有 Bean 的默认作用域。

  那么不知道大家有没有想过如何改变这一现象呢?

  我们只需要在 XML中配置 Bean 的时候加 scope属性,或者给对应的 Bean 加一个 @Scope注解 即可。

  我们今天就来学习一下如何通过 XML配置 Bean 和通过注解配置 Bean 来设置其作用域。

最常见的两个作用域:

  一、singleton

  默认值。容器初始化时创建 bean 实例。在整个容器的生命周期内只创建这一个 bean。它是单例的。

  二、prototype

  原型的。容器初始化时不会创建 bean 实例。而在每次请求时都创建一个新的 Bean 实例,并返回。


注意: Spring 中的 Singleton 主要是针对 “一个 IOC容器 维持一个 Bean实例” 而言的。与设计模式上谈到的Singleton 不同,设计模式上谈到的 Singleton,是指对每个 ClassLoader 所载入的类产生一个实例。





一、在 xml 中设置 Bean 的作用域

<bean id="car" class="com.sun.test3.Car" p:id="20" p:name="ss" scope="prototype" />



二、使用注解设置Bean的作用域

@Scope("prototype")
@Component
public class Car {
    private int id;
    private String name;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小异常

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

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

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

打赏作者

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

抵扣说明:

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

余额充值