
Spring之Bean(作用域、生命周期)
获取BeanDefinition:容器需要明确Bean的定义。 依赖注入:利用容器进行递止单体注入。 BeanNameAware接口处理:如果Bean实现该接口,会自动调用setBeanName()。 BeanFactoryAware接口处理:传递BeanFactory实例。 初始化方法调用:在初始化后立即调用 依赖注入:利用 后初始化处理:调用 全生命周期处理:调用 销毁处理:若Bean实现
发布日期:2021-05-16 13:53:47
浏览次数:18
分类:精选文章
本文共 1448 字,大约阅读时间需要 4 分钟。
Spring Bean作用域与生命周期深入解析
Spring作为一个完善的依赖注入框架,其核心 ideologies 中,Bean的作用域与生命周期是最为重要的概念之一。本文将详细探讨Spring中Bean的作用域以及其生命周期的相关知识。
Bean作用域概述
在Spring中,Bean的作用域定义了一个Bean在应用程序中的存在范围及生命周期。默认情况下,Spring容器会将Bean注册为单例,即每个Bean在容器中只存在一个实例,即使多次获取也是同一实例。这与Java中的单例模式有所不同。
需要注意的是:Spring中的单例是基于BeanFactory的,即Spring IOC容器
五大作用域分类
Spring提供了五种Bean作用域,其中三种作用域仅适用于基于Web的SpringApplicationContext环境:
singleton
- Bean在Spring容器中仅存在一个实例,默认作用域。
- 即使Bean未被作用其它地方也会预先实例化。
prototype
- 每次请求时都会创建一个新的Bean实例。
- 与singleton有本质的区别,后者是预先实例化,前者是按需创建。
request
- 适用于Web环境,每次HTTP请求都会创建一个新的Bean实例。
session
- Bean在一个Http Session中共享一个实例,不同Session使用不同的实例。
globalSession
- 类似于前面提到的Session,但用于基于portlet的Portlet应用环境。
Bean作用域的特点
singleton作用域
- 特点:在Spring容器中仅存一个Bean实例,后续获取总是获取同一实例。
- 优点:提高性能,及早发现配置错误。
prototype作用域
- 特点:每次得到Bean时都获取一个新实例。
- 优点:灵活性高,但需谨慎处理资源管理。
Bean的实例化与生命周期
在Spring中,Bean的实例化和销毁遵循明确的流程。虽然大多数Bean不需要自定义处理接口,但了解其内在逻辑有助于优化配置和调试。
实例化过程
Bean生命周期
在Spring中,Bean的生命周期包括如下阶段:
init-method
。@Autowired
或<property>
进行依赖注入。BeanPostProcessor
接口的相关方法。InitializingBean
或init-method
接口。DisposableBean
接口,则调用destroy()
方法。interface方法的调用
虽然大多数Bean不需要自定义处理接口,但了解接口方法的调用机制有助于定位问题和优化配置。
需要注意的是:很多Bean不需要手动处理接口,默认设置会提供几乎完整的生命周期管理。
总结
通过本文的内容,readers已经掌握了Spring中Bean作用域及生命周期的关键知识。了解这些知识点对于优化Spring应用配置、提高开发效率至关重要。此外,熟悉Bean的生命周期也能帮助定位开发过程中出现的问题。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月19日 20时37分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用 TortoiseGit 时,报 Access denied 错误
2019-03-06
基于 HTML5 WebGL 的污水处理厂泵站自控系统
2019-03-06
c++之程序流程控制
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
李笑来必读书籍整理
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
Android DEX加固方案与原理
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Java多线程
2019-03-07
openssl服务器证书操作
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
selenium+python之切换窗口
2019-03-07