“简单”理解spring bean生命周期

本文持续更新中

有时候在想一个问题:如果一个Java开发仅仅会用某个框架(当然最典型的是Spring),那么随着工作经验、年龄的增加,很难继续留在这个行业。每年都有应届生涌入这个行业,如果一个人的工龄、年龄不断增加,但是技术实力和一个应届生之间没有太大的距离,那么势必会被淘汰掉,这是事物发展的规律。

说到Spring bean,其实不要上来就聊生命周期、启动流程之类的。我们应该进口Spring的两大核心IOC和AOP。这里不会解释什么是IOC或者AOP,这两个概念应该是最最最基础的概念(思想)。这两种思想在Spring中的体现都离不开Spring bean:其实Spring的很多概念都可以围绕Spring bean来加深理解。

对于Spring bean,可以把他做一个特殊的对象。只不过这个对象是Spring为我们进行管理--这是这个框架强大的功能体现。既然谈到了管理,那么就离不开生命周期:

  • 实例化 Instantiation
  • 属性赋值 Populate
  • 初始化 Initialization
  • 销毁 Destruction

最重要的是前三个周期。至于启动流程,其实都是围绕springbean展开的,穿插在以上四个生命周期的前后,实现对bean的全方位管理。

然后带着设计的思维再往源码角度理解,如果不带着设计思维,很容易陷入细节的沼泽,到最后看的昏昏欲睡~

实例化:

为什么说这个生命周期很重要,这里就要深入到源码来加深理解,AbstractApplicationContext类中有个非常重要的方法refresh(),这个方法看着一堆流程(当然都有注释,不得不佩服作者的好习惯!),其实只需要先留意这个方法(实例化):

arduino 复制代码
// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);

管理bean,自然的离不开方法(method)。围绕以上四个阶段,延申出来了两种类型的方法:bean自身的方法和容器级的方法(这里的主要是PostProcessor)。其中容器级别的方法是属于容器的,独立于bean,并且创建每一个bean的过程中,都会启动作用。bean级的生命周期方法,主要是又aware。尤其针对于实例化前后、初始化前后,都有比较重要的后置处理器来进行额外的拓展性增强处理。

如果再细致下,bean级别的这里又分为自身的、拓展的(拓展的意思是该bean实现了特定的接口,这里我自己理解为是拓展的)。容器级别的主要是一堆post处理器;bean级别的有例如get set 构造方法等等,当然这是内部的,拓展出来的呢又有其他的,比较具有代表的就是ware(感知)接口,aware这类接口众多,想记住全部不太现实,其实我们只要理解了这类的作用就好。通常经常遇到beannameaware beanfactoryaware xxware接口等等,这些主要的作用是可以拿到xx资源,增加了灵活性,其实就是面向接口编程的重要体现。

相关推荐
qq_297574673 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
计算机程序设计小李同学11 小时前
基于 Spring Boot + Vue 的龙虾专营店管理系统的设计与实现
java·spring boot·后端·spring·vue
Charlie_lll13 小时前
力扣解题-[3379]转换数组
数据结构·后端·算法·leetcode
VX:Fegn089513 小时前
计算机毕业设计|基于springboot + vue云租车平台系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
汤姆yu14 小时前
2026基于springboot的在线招聘系统
java·spring boot·后端
计算机学姐14 小时前
基于SpringBoot的校园社团管理系统
java·vue.js·spring boot·后端·spring·信息可视化·推荐算法
hssfscv14 小时前
Javaweb学习笔记——后端实战8 springboot原理
笔记·后端·学习
咚为14 小时前
Rust tokio:Task ≠ Thread:Tokio 调度模型中的“假并发”与真实代价
开发语言·后端·rust
Anastasiozzzz15 小时前
对抗大文件上传---分片加多重Hash判重
服务器·后端·算法·哈希算法
Vivienne_ChenW16 小时前
DDD领域模型在项目中的实战
java·开发语言·后端·设计模式