当前位置:

首页 > 编程开发 > Java Bean作用域是什么及怎么实现

Java Bean作用域是什么及怎么实现

PS:Java中的公共类可称之为Bean或JavaBean。1.作用域Bean的作用域是指Bean在Spring整个框架中的某种行为模式。比如singleton单例作用域,就表示Bean在整个Spring中只有一份,它是全局共享的,当有人修改了这个值之后,那么另一个人读取到的就是被修改后的值。举个例子,比如我们在Spring中定义了一个单例的Bean对象user(默认作用域为单例),具体实现代码如下:@ComponentpublicclassUserBean{@BeanpublicUseruser(){U

本文目录

    PS:Java 中的公共类可称之为 Bean 或 Java Bean。

    1.作用域

    Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式。比如 singleton 单例作用域,就表示 Bean 在整个 Spring 中只有一份,它是全局共享的,当有人修改了这个值之后,那么另一个人读取到的就是被修改后的值。

    举个例子,比如我们在 Spring 中定义了一个单例的 Bean 对象 user(默认作用域为单例),具体实现代码如下:

    @Component
    public class UserBean {
        @Bean
        public User user() {
            User user = new User();
            user.setId(1);
            user.setName("Java"); // 此行为重点:用户名称为 Java
            return user;
        }
    }

    然后,在 A 类中使用并修改了 user 对象,具体实现代码如下:

    @Controller
    public class AController {
        @Autowired
        private User user;
        public User getUser() {
            User user = user;
            user.setName("MySQL"); // 此行为重点:将 user 名称修改了
            return user;
        }
    }

    最后,在 B 类中也使用了 user 对象,具体实现代码如下:

    @Controller
    public class BController {
        @Autowired
        private User user;
        public User getUser() {
            User user = user;
            return user;
        }
    }

    此时我们访问 B 对象中的 getUser 方法,就会发现此时的用户名为 A 类中修改的“MySQL”,而非原来的“Java”,这就说明 Bean 对象 user 默认就是单例的作用域。如果有任何地方修改了这个单例对象,那么其他类再调用就会得到一个修改后的值。

    2.作用域分类

    在 Spring 中,Bean 的常见作用域有以下 5 种:

    • singleton:单例作用域;

    • prototype:原型作用域(多例作用域);

    • request:请求作用域;

    • session:会话作用域;

    • application:全局作用域。

    注意:后 3 种作用域,只适用于 Spring MVC 框架。

    2.1 singleton

    官方说明:(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.

    描述:该作用域下的 Bean 在 IoC 容器中只存在一个实例:获取 Bean(即通过 applicationContext.getBean等方法获取)及装配 Bean(即通过 @Autowired 注入)都是同一个对象。

    场景:通常无状态的 Bean 使用该作用域。无状态表示 Bean 对象的属性状态不需要更新。

    备注:Spring 默认选择该作用域。

    2.2 prototype

    官方说明:Scopes a single bean definition to any number of object instances.

    描述:每次对该作用域下的 Bean 的请求都会创建新的实例:获取 Bean(即通过 applicationContext.getBean 等方法获取)及装配 Bean(即通过 @Autowired 注入)都是新的对象实例。

    场景:通常有状态的 Bean 使用该作用域。

    2.3 request

    官方说明:Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.

    描述:每次 Http 请求会创建新的 Bean 实例,类似于 prototype。

    场景:一次 Http 的请求和响应的共享 Bean。

    备注:限定 Spring MVC 框架中使用。

    2.4 session

    官方说明:Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.

    描述:在一个 Http Session 中,定义一个 Bean 实例。

    场景:用户会话的共享 Bean, 比如:记录一个用户的登陆信息。

    备注:限定 Spring MVC 框架中使用。

    2.5 application

    官方说明:Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.

    描述:在一个 Http Servlet Context 中,定义一个 Bean 实例。

    场景:Web 应用的上下文信息,比如:记录一个应用的共享信息。

    备注:限定 Spring MVC 框架中使用。

    3.作用域设置

    我们可以通过 @Scope 注解来设置 Bean 的作用域,它的设置方式有以下两种:

    直接设置作用域的具体值,如:@Scope("prototype");

    设置 ConfigurableBeanFactory 和 WebApplicationContext 提供的 SCOPE_XXX 变量,如 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)。

    具体设置代码如下:

    Java Bean作用域是什么及怎么实现

    Java Bean作用域是什么及怎么实现

    Java Bean作用域是什么及怎么实现

    Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式。Bean 的常见作用域有 5 种:singleton(单例作用域)、prototype(原型作用域)、request(请求作用域)、session(请求作用域)、application(全局作用域),注意后 3 种作用域只适用于 Spring MVC 框架。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。