新闻详情

新闻详情

首页 / 资讯中心 / 详情

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 2

发布时间:2026/9/30 2:27:10来源:尧图网络
《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 2
《SpringBoot 3入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 23.2 Bean 的作用域作用域是一个很关键的概念理解这个概念对学习 Spring Framework 中 Bean 的作用域很有帮助。3.2.1 理解作用域Java 语言的基础概念成员变量、方法变量、局部变量。3.2.2 内置的作用域Spring Framework 中内置了 6 种作用域6.x版本​。作用域类型概述singleton一个 IOC 容器中只有一个proptype每次获取新创建一个request一次请求创建一个session一个会话创建一个application一个 Web 应用创建一个websocket一个 websocket 会话创建一个3.2.3 单实例 (singleton)Spring Framework 中默认所有的 Bean 都是单实例的即一个 IOC 容器中只有一个。1.创建 Bean配置类先创建两个简单类 Child 和 Toy。接下来开始编写注解配置类为了演示 Toy 在 IOC 容器中只产生了一个 Bean我们在配置类 BeanScopeConfiguration 中注入两个 Child 类型的 Bean都注入 Toy 类型的 Bean。packagecom.yangjunbo.bean.scope.examplea;importorg.springframework.stereotype.Component;ComponentpublicclassToy{}packagecom.yangjunbo.bean.scope.examplea;publicclassChild{privateToytoy;publicvoidsetToy(Toytoy){this.toytoy;}OverridepublicStringtoString(){returnChild{toytoy};}}packagecom.yangjunbo.bean.scope.examplea;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;ConfigurationComponentScan(com.yangjunbo.bean.scope.examplea)publicclassBeanScopeConfiguration{BeanpublicChildchild1(Toytoy){ChildchildnewChild();child.setToy(toy);returnchild;}BeanpublicChildchild2(Toytoy){ChildchildnewChild();child.setToy(toy);returnchild;}}2.测试运行启动类 BeanScopeAnnoApplication使用注解驱动 IOC 容器并从容器中取出所有 Child 对象打印其内部的 Toy 对象并观察。运行 main 方法控制台中打印的两个 Child 中持有的 Toy 是同一个证明默认情况下 IOC 容器中的 Bean 作用域的确是单实例的。packagecom.yangjunbo.bean.scope.examplea;importorg.springframework.context.ApplicationContext;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;publicclassBeanScopeAnnoApplication{publicstaticvoidmain(String[]args)throwsException{ApplicationContextctxnewAnnotationConfigApplicationContext(BeanScopeConfiguration.class);ctx.getBeansOfType(Child.class).forEach((name,child)-{System.out.println(name : child);});}}3.2.4 原型 (prototype)如果连续两次调用 getBean 方法那么应当创建两个不同的 Bean向两个不同的 Bean 中注入两次也应当注入两个不同的 Bean。1.原型 Bean 效果演示Toy 类上标注一个额外的注解 Scope并声明为原型类型。在接口 ConfigurableBeanFactory 中定义好了常量如果担心声明作用域时拼错单词建议直接引用对应的常量。其他代码不需要改变直接运行 BeanScopeAnnoApplication 的 main 方法发现控制台打印的两个 Toy 确实不同。2.原型 Bean 的创建时机对于单实例 Bean 的创建时机我们已经了解在 ApplicationContext 被初始化时就已经创建完毕那么原型 Bean 的创建时机是什么原型 Bean 都是在获取时创建的。验证方法可以给 Toy 类中添加一个无参构造方法构造方法中打印信息到控制台。修改启动类BeanScopeAnnoApplication如果只做组件扫描不加载配置类这样就相当于只有一个 Toy 类被扫描进去了Child 不会注册到 IOC 容器中Toy 类的构造方法没有打印说明容器初始化时没有创建 Toy Bean。而如果不修改启动类以 BeanScopeConfiguration 配置类驱动 IOC 容器则控制台中可以看到两次 Toy 构造方法的打印。packagecom.yangjunbo.bean.scope.examplea;importorg.springframework.context.ApplicationContext;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;publicclassBeanScopeAnnoApplication{publicstaticvoidmain(String[]args)throwsException{ApplicationContextctxnewAnnotationConfigApplicationContext(BeanScopeConfiguration.class);ctx.getBeansOfType(Child.class).forEach((name,child)-{System.out.println(name : child);});System.out.println(---------------------不加载配置类---------------------);ApplicationContextctx2newAnnotationConfigApplicationContext();System.out.println(---------------------加载配置类---------------------);ApplicationContextctx3newAnnotationConfigApplicationContext(BeanScopeConfiguration.class);}}3.2.5 Web 中的扩展作用域request每次客户端向 Web 应用服务器发起一次请求Web 服务器接收到请求后由 Spring Framework 生成一个 Bean直到请求结束后销毁。session每个客户端在与 Web 应用服务器发起会话后Spring Framework 会为之生成一个 Bean直到会话过期后销毁。application每个 Web 应用在启动时Spring Framework 会生成一个 Bean直到应用停止后销毁。websocket每个客户端在与 Web 应用服务器建立 WebSocket 长连接时Spring Framework 会为之生成一个 Bean直到断开连接后销毁。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Windows屏幕批注工具全指南:从自带截图到Snipaste、ZoomIt实战 2026/9/30 3:26:37

Windows屏幕批注工具全指南:从自带截图到Snipaste、ZoomIt实战

1. 为什么屏幕批注突然成了刚需:三个高频场景的真实痛点屏幕批注这个词,听起来不像什么新功能,但真正在办公和学习里把它用明白的人,其实并不多。我接触到的大多数Windows用户,批注还停留在“截图之后用系统画图补几笔…

阅读更多 →
Unity新NavMesh系统实战:从Surface烘焙到动态避障的完整指南 2026/9/30 3:26:37

Unity新NavMesh系统实战:从Surface烘焙到动态避障的完整指南

1. 为什么Unity要重写NavMesh?旧方案的积弊与新包的核心增量1.1 旧方案在真实项目里的三大痛点先交代一下背景。用过Unity内置NavMesh的老玩家应该都有这种体验:烘焙走的是Window > AI > Navigation这个老面板,把静态物体在Inspector里…

阅读更多 →
Unreal多线程编程指南:从FRunnable到Async的安全并发实践 2026/9/30 3:26:30

Unreal多线程编程指南:从FRunnable到Async的安全并发实践

做C游戏开发的,接触Unreal之后最先不习惯的,可能就是“线程不能随便开”。在传统C项目里写std::thread、std::async很自然,但在Unreal里,你要是真拿std::thread去跑一个循环,然后在这个线程里碰一下UObject、调一下引擎…

阅读更多 →
微信小程序电影院订票选座系统:全栈开发与并发控制实战 2026/9/30 3:26:30

微信小程序电影院订票选座系统:全栈开发与并发控制实战

在动手写这篇东西之前,我先交代一下背景:这套影院订票选座系统是我最近完整跑通交付的一套微信小程序全栈项目,源码、数据库脚本、接口文档、部署说明、调试记录,一个不落。之所以想把这个项目拆开来讲,是因为它麻雀虽…

阅读更多 →
2025 PyCharm 安装与 Python 解释器配置避坑指南 2026/9/30 3:26:30

2025 PyCharm 安装与 Python 解释器配置避坑指南

上周有个朋友把 PyCharm 的安装包从某个网盘里拖了下来,装完之后发现解释器怎么都选不上,控制台里 python 命令跳转到了应用商店,折腾了两个小时才回头来找我。这种事我见过太多次——PyCharm 的安装流程本身不复杂,真正让人卡住的…

阅读更多 →
vDisk虚拟磁盘全解析:云桌面镜像批量部署与性能优化实战 2026/9/30 3:26:24

vDisk虚拟磁盘全解析:云桌面镜像批量部署与性能优化实战

这两年做云桌面项目,被问得最多的一个问题就是:五十台终端要统一装系统、统一装软件,能不能别一台一台去折腾?我的回答通常很简单——如果你的诉求是“让所有机器保持一致、更新一次全部生效”,那 vDisk(虚…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉