“简单”理解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资源,增加了灵活性,其实就是面向接口编程的重要体现。

相关推荐
ai小鬼头4 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
萧曵 丶5 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
老任与码5 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
华子w9089258596 小时前
基于 SpringBoot+VueJS 的农产品研究报告管理系统设计与实现
vue.js·spring boot·后端
星辰离彬6 小时前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
GetcharZp7 小时前
彻底告别数据焦虑!这款开源神器 RustDesk,让你自建一个比向日葵、ToDesk 更安全的远程桌面
后端·rust
jack_yin8 小时前
Telegram DeepSeek Bot 管理平台 发布啦!
后端
小码编匠8 小时前
C# 上位机开发怎么学?给自动化工程师的建议
后端·c#·.net
库森学长8 小时前
面试官:发生OOM后,JVM还能运行吗?
jvm·后端·面试
转转技术团队8 小时前
二奢仓店的静默打印代理实现
java·后端