Spring中Bean的作用域

本文介绍了Spring框架中Bean的五种作用域:singleton、prototype、request、session和globalsession。重点对比了最常用的作用域singleton(单例模式)和prototype(原型模式),并举例说明了这两种模式下Bean实例的行为差异。

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

Bean的作用域

Bean的作用域是指Bean实例的有效范围。

作用域名称描述
single单例模式。在单例模式下,Spring容器中只会存在一个共享的Bean实例,所有对Bean的请求,只要请求的id(或name)与Bean的定义相匹配,就会返回Bean的同一个实例。
prototype原型模式。每次从容器中请求Bean时,都会产生一个新的实例
request每一个HTTP请求都会有自己的Bean实例,该作用域只能在基于Web的Spring ApplicationContext中使用
session每一个HttpSession请求都会有自己的Bean实例,该作用域只能基于Web的Spring ApplicationContext中使用。
global session限定一个Bean的作用域为Web应用(HttpSession)的生命周期,只有在Web应用中使用Spring时,该作用域才有效

其中single【默认】和prototype是两种最为常用的作用域。

singleton作用域

singleton是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器只为Bean创建一个实例,该实例可以重复使用。避免反复创建和销毁实例造成的资源消耗。

public class Bean1 {
    public Bean1(){
        System.out.println("这是Bean1");
    }
}
<bean id="bean1" class="com.hua.dao.Bean1" scope="singleton"/>
public class MyTest3 {
    @Test
    public void ScopeTest(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("bean1.xml");
        Bean1 bean1 = ac.getBean("bean1", Bean1.class);
        Bean1 bean11 = ac.getBean("bean1", Bean1.class);
        System.out.println(bean1==bean11);
    }
}

在这里插入图片描述

由此表明,对singleton作用域的Bean,程序每次请求Bean都会返回同一个实例

prototype作用域

当Bean的作用域为prototype时,每次对Bean请求时都会**创建一个新的Bean实例,**Spring容器只负责创建实例而不再管理其生命周期。

在这里插入图片描述

由此表明Spring容器获取Bean1类的两个实例不是同一个实例。对于prototype作用域的Bean,程序每次请求Bean都会返回一个新的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值