【Spring 原理】Bean 的作用域与生命周期
文章目录一、Bean的作用域1.1 概念1.2 Bean的作用域二、Bean的生命周期2.1 概念2.1 代码演示一、Bean的作用域1.1 概念在Spring IoCDISpring 是通过以下方式管理对象的。通过Controller , Service , Repository , Component , Configuration , Bean 来声明Bean对象。通过 ApplicationContext 或者 BeanFactory 来获取对象通过Autowired , Setter 方法或者构造方法等来为应用程序注入所依赖的Bean对象。通过Bean 声明bean , 把bean存在Spring容器中ComponentpublicclassDogBeanConfig{BeanpublicDogdog(){DogdognewDog();dog.setName(旺旺);returndog;}}从Spring容器中获取BeanSpringBootApplicationpublicclassSpringIocApplication{publicstaticvoidmain(String[]args){//获取Spring上下文对象ApplicationContextcontextSpringApplication.run(SpringIocApplication.class,args);//从Spring上下文中获取对象Dogdogcontext.getBean(Dog.class);System.out.println(dog);}}也可以通过在代码中直接注入ApplicationContext的方式来获取Spring容器SpringBootTestclassDemoApplicationTests{AutowiredprivateApplicationContextapplicationContext;//Spring 容器TestvoidcontextLoads(){DogBeandog1applicationContext.getBean(DogBean.class);System.out.println(dog1);}}观察运行结果发现输出的bean对象地址值是一样的说明每次从Spring容器中取出来的对象都是同一个。这也是单例模式单例模式确保一个类只有一个实例多次创建也不会创建出多个实例。默认情况下Spring容器中的bean都是单例的这种行为模式我们就称之为Bean的作用域。Bean 的作用域是指 Bean 在 Spring 框架中的某种行为模式。1.2 Bean的作用域在Spring中支持6种作用域后4种在Spring MVC环境才生效singleton:单例作用域prototype:原型作用域(多例作用域)request:请求作用域session:会话作用域Application: 全局作用域websocket:HTTP WebSocket 作用域作用域说明singleton每个Spring IoC容器内同名称的bean只有一个实例(单例)(默认)prototype每次使用该bean时会创建新的实例(非单例)request每个HTTP 请求生命周期内 创建新的实例(web环境中 了解)session每个HTTP Session生命周期内 创建新的实例(web环境中 了解)application每个ServletContext生命周期内 创建新的实例(web环境中 了解)websocket每个WebSocket生命周期内 创建新的实例(web环境中 了解)二、Bean的生命周期2.1 概念生命周期指的是一个对象从诞生到销毁的整个生命过程我们把这个过程就叫做一个对象的生命周期。 Bean 的生命周期分为以下5个部分实例化(为Bean分配内存空间)属性赋值(Bean注入和装配比如AutoWired )初始化a. 执行各种通知如 BeanNameAware , BeanFactoryAware ,ApplicationContextAware 的接口方法。b. 执行初始化方法▪ xml定义init-method▪ 使用注解的方式 PostConstruct▪ 执行初始化后置方法( BeanPostProcessor )使用Bean销毁Beana. 销毁容器的各种方法如 PreDestroy , DisposableBean 接口方法destroymethod。实例化和属性赋值对应构造方法和setter方法的注入。 初始化和销毁是用户能自定义扩展的两个阶段可以在实例化之后类加载完成之前进行自定义事件处理。执行流程如下图所示:2.1 代码演示ComponentpublicclassBeanLifeComponentimplementsBeanNameAware{privateUserComponentuserComponent;publicBeanLifeComponent(){System.out.println(执行构造函数);}AutowiredpublicvoidsetUserComponent(UserComponentuserComponent){System.out.println(设置属性userComponent);this.userComponentuserComponent;}OverridepublicvoidsetBeanName(Strings){System.out.println(执行了 setBeanName 方法:s);}PostConstructpublicvoidpostConstruct(){System.out.println(执行 PostConstruct());}publicvoiduse(){System.out.println(执行了use方法);}PreDestroypublicvoidpreDestroy(){System.out.println(执行:preDestroy());}}通过运行结果观察先执行构造函数设置属性Bean初始化使用Bean销毁Bean

相关新闻

【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现

【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现

文章目录项目业务层一、实现发布博客1.1 编辑器组件二、实现修改博客三、实现删除博客四、加密/加盐4.1 加密介绍4.2 密码算法分类4.3 加密实现项目业务层 在前两个博文中,已经实现了一些功能,该篇将继续处理剩下的功能。 一、实现发布博客 约定前后端…

2026/7/5 3:29:14 阅读更多 →
利用大数据打造个性化用户画像

利用大数据打造个性化用户画像

利用大数据打造个性化用户画像:从0到1读懂你的用户 引言:你真的“懂”你的用户吗? 清晨打开电商APP,首页推的是你上周浏览过的户外帐篷;中午刷视频平台,推荐列表全是你喜欢的悬疑剧解说;晚上收到…

2026/5/17 2:50:52 阅读更多 →
【GaussDB】从RBAC到精细化控制的企业级安全实践

【GaussDB】从RBAC到精细化控制的企业级安全实践

在数据驱动的数字化转型浪潮中,数据库权限管理已成为企业数据安全的生命线。华为GaussDB作为分布式数据库的领军者,通过​​多层权限模型​​与​​动态审计机制​​,构建了兼顾灵活性与安全性的访问控制体系。本文将深入解析其技术原理、实操…

2026/5/17 2:50:51 阅读更多 →

最新新闻

iOS27 App Intents 实战

iOS27 App Intents 实战

iOS27 App Intents 实战:新版 Siri 快捷指令接入全流程教程随着WWDC2026的正式落幕,苹果推送的iOS27带来了Siri架构的全面重构,其中最核心的变化就是正式弃用SiriKit,将App Intents确立为第三方应用接入Siri的唯一官方框架。对于开…

2026/7/5 3:29:02 阅读更多 →
Transformer 英中翻译实战:PyTorch 从零实现,BLEU 值提升 15% 的 3 个关键调参技巧

Transformer 英中翻译实战:PyTorch 从零实现,BLEU 值提升 15% 的 3 个关键调参技巧

Transformer 英中翻译实战:PyTorch 从零实现,BLEU 值提升 15% 的 3 个关键调参技巧在机器翻译领域,Transformer 架构已经成为事实上的标准。本文将带你从零开始实现一个完整的英中翻译模型,并分享三个经过实战验证的关键调参技巧&…

2026/7/5 3:27:02 阅读更多 →
利用RAG构建品牌AI知识库:六步SOP提升技术影响力

利用RAG构建品牌AI知识库:六步SOP提升技术影响力

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你的品牌、产品、技术文档,是否正在被 AI 遗忘?当开发者向 ChatGPT、Claude 或国内大模型提问“如何集成 XX S…

2026/7/5 3:25:01 阅读更多 →
DesignWare® Cores LPDDR5/4/4x PHY for TSMC12FFC18 Databook的中文版

DesignWare® Cores LPDDR5/4/4x PHY for TSMC12FFC18 Databook的中文版

DesignWare Cores LPDDR5/4/4x PHY for TSMC12FFC18 Databook的中文版,dwc_lpddr54_phy_tsmc12ffc18- Product Code: D774-0,PHY Version: 2.40a July 8, 2021,是DW LPDDR5/4 PHY在TSMC12FFC工艺下的技术数据手册,为芯片设计者提供…

2026/7/5 3:25:01 阅读更多 →
曲线曲线2D解析求交方案

曲线曲线2D解析求交方案

曲线曲线2D解析求交方案 文章目录曲线曲线2D解析求交方案一. 2D 点到椭圆的最近点计算1. 推荐主方案:λ 方程 Halley bracket 保护2. bracket 区间3. Halley bracket 保护4. Newton bracket 对比实现5. 轴线和中心特殊情况6. 椭圆弧最近点7. 方向角初值方案的定位…

2026/7/5 3:23:00 阅读更多 →
Entity Framework 4.1 DbContext使用记之三——如何玩转实体的属性值?

Entity Framework 4.1 DbContext使用记之三——如何玩转实体的属性值?

今天为大家带来DbSet.Local属性的使用与实现。和上次介绍的Find函数首先查找context中缓存的实体类似,DbSet的Local属性也是返回context中缓存并且被跟踪的实体。不同点在于,Local属性不会返回状态为EntityState.Deleted的实体,且即使缓存中什…

2026/7/5 3:23:00 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻