Spring与Spring Boot

Spring IoC 与 DI、Bean 生命周期、BeanDefinition 与容器刷新

20 篇文档MODULE 06
DOC

Spring IoC 与 DI:控制反转、依赖注入、BeanFactory 和 ApplicationContext(081)

一、IoC 不是"Spring 发明的",而是 Spring 让它普及的 控制反转(IoC, Inversion of Control)和依赖注入(DI, Dependency Injection)是 Spri…

DOC

Bean 生命周期:实例化、属性填充、Aware、前后置处理、初始化和销毁(082)

一、Bean 生命周期是 Spring 框架的"骨架" 理解 Spring 的 Bean 生命周期,不只是为了面试,更是为了理解 Spring 的扩展机制。Spring 的几乎所有高级特性——AOP、事务管理、…

DOC

BeanDefinition 与容器刷新:配置解析、注册、后处理器和 refresh 流程(083)

一、为什么要理解 BeanDefinition 和 refresh() 上一篇讲了 Bean 从"半成品"变成"成品"的生命周期(081/082),但那一切都建立在一个前提之上:容器已经知道要创建哪些 Bean…

DOC

Spring Bean 作用域:singleton、prototype、request、session 与线程安全(084)

一、为什么作用域比生命周期更容易踩坑 前三篇分别讲了容器如何完成依赖注入(081)、Bean 从"半成品"到"成品"要经过哪些阶段(082)、以及容器如何解析配置并驱动这一切(083)。这些内容回答的都是"一个…

DOC

依赖注入方式:构造器、Setter、字段注入的差异与循环依赖影响(085)

一、为什么"用哪种注入方式"不是风格问题 081 讲了 IoC/DI 的整体框架,082 讲了 Bean 生命周期的各个阶段,083 讲了容器如何解析配置并驱动 refresh 流程,084 讲了作用域决定"造…

DOC

循环依赖:三级缓存、提前暴露、代理对象以及无法解决的场景(086)

一、承接前两篇:为什么循环依赖值得单独一篇 084 提到过三级缓存的结构,085 讲了不同注入方式对循环依赖能否被解决的影响——两篇都是"点到即止",因为循环依赖本身的机制足够深,值得单独展开。这也是 Spri…

DOC

Spring AOP 原理:切点、通知、连接点、织入和代理创建过程(087)

一、承接前两篇:086 留下的一个问题 086 讲循环依赖时提到过一句话:"如果 ServiceB 需要被 @Transactional 代理,提前暴露给别人的引用必须是最终的代理对象。"这句话背后藏着一整套机…

DOC

JDK 动态代理与 CGLIB:生成机制、限制、调用路径与选型(088)

一、承接上篇:087 留下的一个悬念 087 讲 Spring AOP 时反复出现一句话:"生成一个新的代理类,包裹原始对象"——但从没细讲这个代理类到底是怎么生成出来的。Spring 容器面对一个要代理的 B…

DOC

Spring 事务传播行为:REQUIRED、REQUIRES_NEW、NESTED 等语义(089)

一、承接 088:代理能拦截方法,但"事务"具体是怎么被管理的 088 讲完 JDK 动态代理和 CGLIB 之后,只差最后一环没打通: @Transactional 标注的方法,最终是通过代理拦截调用、在方法…

DOC

Spring 事务隔离级别:数据库隔离映射、只读和超时配置(090)

一、承接 089:传播行为解决"事务边界",隔离级别解决"事务之间怎么互相看见" 089 讲的传播行为回答的是"一个事务方法调用另一个事务方法时,两者是不是同一个物理事务";而这篇要讲的 隔离级别(Isolat…

DOC

声明式事务失效场景:自调用、非 public、异常类型、跨线程和多数据源(091)

引言:为什么加了 事务还是没生效 几乎每个用过 Spring 的人都遇到过这种诡异现象:明明在方法上老老实实标了 @Transactional ,出了异常数据却照样落库了,回滚完全没发生。排查半天,最后发现是踩…

DOC

Spring 事务实现原理:TransactionInterceptor、事务管理器和代理边界(092)

引言:从"哪里会失效"到"到底是怎么跑起来的" 上一篇讲了声明式事务的五种典型失效场景,核心结论是"只有调用经过代理才会触发事务逻辑"。但这句话只回答了"什么时候不生效",没有回答"当调用真的经过代理时,内部具…

DOC

Spring MVC 请求流程:DispatcherServlet、HandlerMapping、Adapter、ViewResolver(093)

引言:请求进来之后,到底经过了谁的手 排查 Spring MVC 的问题时,几乎所有报障都能归到"请求流程"上的某一环:接口返回 404,是没有任何 Handler 认领这个 URL;接口返回 406/415,…

DOC

Spring MVC 参数绑定与异常处理:Converter、Validator、ControllerAdvice(094)

引言:从"字符串"到"业务对象",中间发生了什么 上一篇讲清楚了请求怎么被路由到方法、方法怎么被调用。但方法被调用之前还有一步经常被忽略:HTTP 请求里的一切都是字符串(查询参数、路径变量、表单字段)或字节流…

DOC

Spring 事件机制:ApplicationEvent、同步/异步监听及事务事件(095)

引言:为什么业务代码里到处写事件发布,而不是直接调方法 一个常见的场景:用户下单成功后,需要发送短信通知、扣减库存、写入积分、通知物流系统——如果这些逻辑全部写在 OrderService.createOrde…

DOC

Spring Boot 自动配置:条件注解、AutoConfiguration.imports 和加载顺序(096)

引言:为什么"零配置"不等于"零理解" Spring Boot 最吸引人的卖点之一就是"开箱即用"——引入一个 Starter,什么都不用写,就能得到一个功能完备的 DataSource、RedisTempla…

DOC

Spring Boot Starter 设计:依赖封装、配置属性和自动配置模块化(097)

引言:为什么一行 就能让 Redis 跑起来 从一个反直觉的现象开始:你新建一个 Spring Boot 项目,在 pom.xml 里加一行 spring boot starter data redis ,然后…

DOC

Spring Boot 配置体系:配置优先级、Profile、绑定、动态配置与敏感信息(098)

引言:为什么同一个配置项改了 application.yml 却还是不生效 一个经典的线上故障:运维在服务器环境变量里设了 SERVER PORT=8081 ,但应用还是监听了 application.yml …

DOC

Spring Boot 启动流程:SpringApplication、环境准备、上下文创建与 Runner(099)

引言: 这一行代码背后发生了什么 每一个 Spring Boot 应用都从 SpringApplication.run(MyApplication.class, args) 开始。这一行代码背后,Spring …

DOC

Spring 扩展点:BeanFactoryPostProcessor、BeanPostProcessor、ImportSelector、FactoryBean(100)

引言:为什么 Spring 的扩展点是面试必考题 如果你在简历上写了"熟悉 Spring 源码",面试官大概率会问:"Spring 有哪些扩展点?它们的执行顺序是什么?你在项目中用它们解决过什么问题?"这道题考…