JavaEE——Bean的作用域

目录

一、定义

二、六种作用域

1、singleton

(1)、定义

(2)、使用场景

2、prototype

(1)、定义

(2)、使用场景

3、request

(1)、定义

(2)、使用场景

4、session

(1)、定义

(2)、使用场景

5、application

(1)、定义

(2)、使用场景

(3)、单例作用域和全局作用域的区别

6、websocket

(1)、定义

(2)、使用场景

三、设置作用域


一、定义

Bean 的作用域是指 Bean 在 Spring 的整个框架中的行为模式。Spring 容器在初始化一个 Bean 的实例时,会指定该实例的作用域。
例:singleton 的单例作用域表示 Bean 在整个 Spring 中只有一份,是全局共享的。当修改了这个值后,再次读取的就是被修改后的值。

二、六种作用域

Spring 有 6 种作用域,其中在普通的 Spring 项目中只有 singleton 和 prototype 这两种,而其余四种(request、session、application、websocket)则是基于 Spring MVC 生效的。

1、singleton

(1)、定义

singleton是单例作用域,此作用域下的Bean在IoC容器中只存在一个实例,获取Bean及装配Bean都是同一个对象。Spring默认选择该作用域。

(2)、使用场景

在Bean对象的属性状态不需要更新,即无状态的Bean使用该作用域。

2、prototype

(1)、定义

prototype是原型作用域(多例作用域),每次对该作用域下的Bean的请求都会创建新的实例,获取Bean及装配Bean都是新的对象实例。

(2)、使用场景

通常有状态的Bean使用该作用域

3、request

(1)、定义

request是请求作用域,只适用于Spring MVC项目(Spring Web),每次HTTP请求都会创建新的Bean实例,与prototype相类似。

(2)、使用场景

通常是在一次HTTP请求和响应的共享Bean中使用。

4、session

(1)、定义

session 是会话作用域,表示一个 HTTP 会话共享一个Bean ,不同 Session 使用不同的Bean,该作用域只适用于Spring MVC项目(Spring Web)。

(2)、使用场景

在用户会话的共享Bean中使用,常用于记录一个用户的登陆信息。

5、application

(1)、定义

application 是全局作用域,是在一个http servlet Context中定义一个Bean实例,只适用于Spring MVC项目(Spring Web)。

(2)、使用场景

作为Web应用的上下文信息使用,常用来记录一个应用的共享信息。

(3)、单例作用域和全局作用域的区别

  • 作用域不同:singleton是Spring Core的作用域,application是Spring Web的作用域
  • 容器不同:singleton作用于IoC的容器,application作用于Servlet容器

6、websocket

(1)、定义

**websocket是在一个HTTP WebSocket的生命周期中使,定义一个Bean实例。它只适用于Spring WebSocket作用域。**​​​​​​​

(2)、使用场景

WebSocket的每次会话中,都保存了一个Map结构的头信息来包裹客户端消息头。第一次初始化后,直到WebSocket结束都是同一个Bean。

三、设置作用域

使用@Scope标签可以声明Bean的作用域,它既可以修饰方法也可以修饰类。
两种设置方式:

  • 直接设置值:@Scope("prototype")
  • 使用枚举设置:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

例:

复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
public class Users {
    //@Scope("prototype")
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    @Bean(name = "user1")
    public User user1() {
        ......
    }
}
相关推荐
paopaokaka_luck40 分钟前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir41 分钟前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人1 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521592 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐3 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾3 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者3 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯3 小时前
啊啊啊啊啊
java·服务器·数据库
SL_staff4 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈
猫猫.1534 小时前
HashTable、HashMap、ConcurrentHashMap 核心区别总结
java·开发语言·java-ee