Spring的启动流程

1. XML解析(Parsing)------ "读黄书阶段"

  • Spring先他妈把XML当黄书一样从头翻到尾,找到所有<bean>标签。
  • 解析器(比如BeanDefinitionReader)把每个bean的类名、ID、属性、依赖关系 全扒出来,生成一堆BeanDefinition(相当于bean的身份证+简历)。
  • 核心点:XML不是代码,但Spring能把它当菜谱,知道要炒什么菜(对象)。

2. 校验(Validation)------ "查户口阶段"

  • 检查你写的XML是不是脑残:比如类路径对不对,属性有没有拼错,循环依赖这种作死操作。
  • 这时候要是有个class="com.xxx.NotExistClass",直接喷你一脸BeanDefinitionStoreException
  • 核心点:提前发现傻逼错误,防止运行时炸屎。

3. 实例化(Instantiation)------ "造人阶段"

  • 反射 (反射就是Java的巫术)Class.forName() + newInstance(),把类硬生生搞出对象。
  • 如果是单例,这时候对象还是个空壳(属性没填,像被阉了的狗)。
  • 核心点:无脑new对象,但Spring帮你new,你躺好就行。

4. 初始化(Initialization)------ "填弹药阶段"

  • 依赖注入(DI):把对象需要的其他bean(比如DAO、Service)用setter或构造函数怼进去,就像给炮管塞炮弹。
  • BeanPostProcessor插一腿:AOP代理、@Autowired注解这些骚操作,全在这时候搞(比如给你的对象套一层动态代理,变成老六)。
  • 如果bean实现了InitializingBean,会执行afterPropertiesSet(),让你自定义初始化(比如连数据库)。
  • 核心点:把对象武装到牙齿,让它能干活。

5. 销毁(Destruction)------ "送终阶段"

  • 容器关闭时(比如context.close()),单例bean要凉凉。
  • 如果bean实现了DisposableBean,会调用destroy(),让你死前做点事(比如关数据库连接,喊一句"妈的终于下班了")。
  • 核心点:管杀还管埋,避免资源泄露(比如连接池不关,内存炸穿)。

总结流程
读配置 → 查错误 → 造空壳 → 塞依赖 → 搞代理 → 自定义初始化 → 用完了再毁尸灭迹

整个过程像他妈流水线------你写XML/注解,Spring流水线工人(容器)给你拼装对象,最后还给你擦屁股。

灵魂控制反转(IoC)就是把对象的生老病死交给Spring,你自己只管声明要什么,而不是亲自当接生婆!

相关推荐
程序员cxuan几秒前
Opus 5 深夜炸场,价格还挺香。。。
人工智能·后端·程序员
青山木25 分钟前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
卷无止境35 分钟前
Python的collections模块:那些被低估的"瑞士军刀"
后端·python
卷无止境39 分钟前
Python的方法解析顺序:一场关于继承顺序的精妙设计
后端·python
小龙报41 分钟前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
宁&沉沦1 小时前
Chrome 扩展 Manifest 字段版本支持一览(全量)
前端·后端·编辑器
自强的小白1 小时前
重点!起始时间和结束时间与创建时间和修改时间的区别(localdate与LocaldateTIME区别)以及增删改查什么时候设置目前时间(添加和更新员工时)
java
雪的季节1 小时前
Python 线程同步与异步编程 全解析
java·开发语言
吃饱了得干活1 小时前
缓存与数据库一致性:从理论到实战
java·后端·面试
520拼好饭被践踏2 小时前
JAVA+Agent学习day22
java·开发语言·后端·学习