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

相关推荐
s***55817 小时前
如何使用Spring Boot框架整合Redis:超详细案例教程
spring boot·redis·后端
d***9358 小时前
Spring Boot 自动配置
java·spring boot·后端
h***67378 小时前
Spring Boot文件上传
java·spring boot·后端
Pr Young8 小时前
消息队列中的topic,partition,offset,broker,消费者组
后端
狗哥哥8 小时前
Swagger对接MCP服务:赋能AI编码的高效落地指南
前端·后端
申阳8 小时前
Day 18:01. 基于 SpringBoot4 开发后台管理系统-快速了解一下 SpringBoot4 新特性
前端·后端·程序员
用户41429296072398 小时前
解决「买不到、买得贵、买得慢」:反向海淘独立站的核心功能设计与案例复盘
前端·后端·架构
N***p3658 小时前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
00后程序员8 小时前
Charles抓包怎么用 Charles抓包方法、网络调试技巧与HTTPS配置详解
后端
e***95648 小时前
十八,Spring Boot 整合 MyBatis-Plus 的详细配置
spring boot·后端·mybatis