【Spring 从0开始】IOC容器的Bean管理 - Bean 的作用域

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【Spring 从0开始】IOC容器的Bean管理 - Bean 的作用域

bean的作用域,其实就是设置创建 bean 的实例是属于单实例,还是多实例。


1. 默认单实例


默认情况下,创建的 bean 是单实例对象


比如,用之前的代码为例:


@Test
    public void testCollection2() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean2.xml");
        Book book = context.getBean("book", Book.class);
        Book book2 = context.getBean("book", Book.class);
        System.out.println(book);
        System.out.println(book2);
    }


在测试方法中,创建了 2 个 Book 类型的实例 book 和 book2,默认情况下应该是单实例,打印出来的地址应该一致。


com.pingguo.spring5.collectiontype.Book@4ae82894
com.pingguo.spring5.collectiontype.Book@4ae82894
Process finished with exit code 0


地址一致。


2. 设置多实例


在配置文件中的 bean 标签里,有一个属性 scope 是用来设置单实例和多实例的。

scope 有多个值:


  • singleton:也是默认值,表示单实例对象。
  • prototype:表示多实例对象。
  • request:每次 http 请求都会创建一个新的 bean,仅适用于 WebApplicationContext 环境。
  • session:同一个 http session 共享一个 bean,不同的 session 使用不同的 bean,仅适用于 WebApplicationContext 环境。


而最常用的有 2 个:singleton 和 prototype。


现在把上述的示例代码改成多实例的,那么配置文件中增加 scope="prototype"


<bean id="book" class="com.pingguo.spring5.collectiontype.Book" scope="prototype">
        <property name="list" ref="bookList"></property>
    </bean>


再次运行测试方法:


com.pingguo.spring5.collectiontype.Book@543788f3
com.pingguo.spring5.collectiontype.Book@6d3af739
Process finished with exit code 0


可以看到,2个对象地址不同。


此外,singleton 和 prototype 还有 1 个区别需要注意


  • scope 值为 singleton :加载 spring 配置文件的时候,就会创建单例对象。
  • scope 值为 prototype :加载配置文件时候不创建,而是在调用 getBean 方法时候创建多个实例对象。
相关文章
|
11天前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
21 0
|
11天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
21 0
|
11天前
|
XML Java 程序员
什么是Spring的IoC容器?
【4月更文挑战第30天】什么是Spring的IoC容器?
19 0
|
11天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
19 1
|
13天前
|
前端开发 Java 数据格式
【Spring系列笔记】定义Bean的方式
在Spring Boot应用程序中,定义Bean是非常常见的操作,它是构建应用程序的基础。Spring Boot提供了多种方式来定义Bean,每种方式都有其适用的场景和优势。
31 2
|
13天前
|
Java Spring 容器
【Spring系列笔记】IOC与DI
IoC 和 DI 是面向对象编程中的两个相关概念,它们主要用于解决程序中的依赖管理和解耦问题。 控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入和依赖查找。
30 2
|
14天前
|
Java 测试技术 数据库连接
Spring中ioc的优点
总之,Spring中的IoC提供了一种更加灵活、可维护、可测试和可扩展的方式来管理组件之间的依赖关系,从而提高了应用程序的质量和可维护性。这使得开发人员能够更专注于业务逻辑而不是底层的技术细节。
32 1
|
16天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
17天前
|
XML Java 数据格式
【spring】01 Spring容器研究
【spring】01 Spring容器研究
9 0
|
22天前
|
Java 应用服务中间件 Spring