在日常 CRUD 之外,真正能拉开工程师差距的,是对框架底层运行机制的掌握。循环依赖是 Spring 面试的高频考点,但绝大多数人只背下了"三级缓存"这四个字,却说不清"为什么是三级而不是两级"、也讲不明白"构造器循环依赖为什么无解"。本文从容器启动流程出发,沿着 Bean 生命周期的完整链路,把三级缓存的来龙去脉、设计权衡和生产实践一次讲透。
一、容器启动流程:一条 refresh() 主线
Spring 的 IoC 容器无论以何种方式创建——ClassPathXmlApplicationContext、AnnotationConfigApplicationContext 还是 Spring Boot 内嵌的 AnnotationConfigServletWebServerApplicationContext——最终都会收敛到 AbstractApplicationContext#refresh() 这一个方法上。它是整个容器的"总装线",理解它也就理解了容器启动的全貌。
2023/6/17大约 13 分钟