P4 · Spring 生态与中间件(W17-22)
目标:能独立搭建 Spring Cloud 微服务,理解 IoC / AOP / 自动配置原理 验收:能讲清楚 Spring Boot 自动配置全流程,能复现一个 Starter
一、本阶段核心知识点
A. Spring 核心(必读源码级)
1. IoC 容器
- BeanDefinition:
BeanDefinition接口、5 种 scope、lazy-init - 生命周期:实例化 → 属性注入 →
Aware接口 →BeanPostProcessor→ 初始化 → 销毁 - 循环依赖:三级缓存(singletonFactories / earlySingletonObjects / singletonObjects)
BeanFactoryvsApplicationContext@Autowired注入模型:byName/byType/ 构造器
2. AOP
- 概念:joinpoint / pointcut / advice / aspect / weaving / target / proxy
- 实现:JDK Proxy(接口) vs CGLIB(类)
- 5 种通知:
@Before/@After/@Around/@AfterReturning/@AfterThrowing - 织入器:
ProxyFactory/@EnableAspectJAutoProxy - Spring 事务的 AOP 实现(
TransactionInterceptor)
3. 事务
- 4 种传播行为:
REQUIRED/REQUIRES_NEW/NESTED/SUPPORTS等 - 隔离级别、readOnly、timeout
@Transactional失效的 7 种场景(自调用、异常类型、异常被吞等)
B. Spring Boot
1. 自动配置原理(面试必考)
@SpringBootApplication三件套:@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan@EnableAutoConfiguration→AutoConfigurationImportSelector→spring.factories@Conditional家族:@ConditionalOnClass/@ConditionalOnBean/@ConditionalOnProperty/@ConditionalOnMissingBean/@ConditionalOnWebApplicationspring.factories→META-INF/spring/AutoConfiguration.imports(Spring Boot 2.7+)
2. 自定义 Starter
- 步骤:编写
@Configuration→ 注册到imports→ 写spring-configuration-metadata.json - 命名规范:
*spring-boot-starter由 Spring 官方;*spring-boot-starter-*给第三方
3. Web 原理
- 内嵌 Tomcat 启动流程(
TomcatServletWebServerFactory) - Spring MVC 处理流程:
DispatcherServlet→HandlerMapping→HandlerAdapter→Handler→ViewResolver @RequestMapping注册流程- 文件上传、异常处理(
@ControllerAdvice+@ExceptionHandler)
4. 配置体系
application.yml加载顺序(profile、命令行、外部配置)@ConfigurationPropertiesvs@ValueEnvironment抽象、PropertySource优先级
C. ORM 与数据库访问
- MyBatis:核心对象(
SqlSession/Executor/StatementHandler) - MyBatis 插件机制(
Interceptor+ 责任链) - MyBatis-Plus:Wrapper、内置分页、逻辑删除、字段自动填充
- Spring Data JPA / Spring Data Redis / Spring Data MongoDB
D. Spring Cloud Alibaba(重点掌握)
| 组件 | 作用 | 替代方案 |
|---|---|---|
| Nacos | 服务注册 + 配置中心 | Eureka + Spring Cloud Config |
| Sentinel | 限流、熔断、降级 | Hystrix(已停更)/ Resilience4J |
| Gateway | API 网关 | Zuul(已停更) |
| Seata | 分布式事务(AT/TCC/SAGA/XA) | TX-LCN / ByteTCC |
| RocketMQ | 消息队列 | Kafka / RabbitMQ |
| OpenFeign | 声明式 HTTP 调用 | RestTemplate / WebClient |
二、任务清单(可勾选打卡)
Week 17 · Spring 核心
- 阅读
AbstractApplicationContext.refresh()源码(重点) - 写 demo:三级缓存解决循环依赖,验证 1.6 后的限制
- 阅读 AOP 源码:
AnnotationAwareAspectJAutoProxyCreator - 总结
@Transactional7 种失效场景
Week 18 · Spring Boot 原理
- 跟读
SpringApplication.run()14 步源码 - 跑通
AutoConfiguration.imports自定义自动配置 demo - 实现一个自定义 Starter("HelloAutoConfiguration"),能在另一项目自动装配
- 阅读
TomcatServletWebServerFactory启动流程
Week 19 · Spring MVC 与 MyBatis
- 跟读
DispatcherServlet.doDispatch()9 步流程 - 自定义一个
HandlerMethodArgumentResolver - 阅读 MyBatis
Executor与MappedStatement - 实现 MyBatis 拦截器 demo:自动填充审计字段
Week 20 · Spring Cloud 入门
- docker-compose 搭建 Nacos + Sentinel + Gateway
- 实现 Provider/Consumer 微服务,完成 Feign 调用
- 配置 Gateway 路由 + 过滤器(限流、鉴权)
- 集成 Sentinel 实现 QPS 限流 + 熔断降级
Week 21 · 配置中心与分布式事务
- 用 Nacos Config 实现配置热更新(@RefreshScope)
- 用 Seata AT 模式实现下单 + 扣库存 + 扣账户 完整 demo
- 演示 Seata 3 种模式(AT/TCC/SAGA)的差异
- 总结分布式事务选型决策树
Week 22 · 综合实战
- 完成「订单服务」Demo:Spring Boot + Nacos + Sentinel + OpenFeign + Seata
- 用 SkyWalking 做链路追踪
- 用 arthas 做线上问题排查练习
- 写一份《微服务技术选型报告》
三、阶段验收标准
✅ 能独立完成:
- 现场画出 Spring Bean 生命周期时序图
- 现场写出三级缓存解决循环依赖的代码片段
- 解释 @EnableAutoConfiguration 工作原理
- 在新项目中实现自定义 Starter
- 选择合适的微服务组件并讲出选型理由
四、产出物
notes/P4-week17-Spring核心.mdnotes/P4-week18-SpringBoot原理.mdnotes/P4-week19-MVC与MyBatis.mdnotes/P4-week20-微服务入门.mdnotes/P4-week21-分布式事务.mdnotes/P4-week22-微服务综合.mdstarter/hello-spring-boot-starter/自定义 Starter 工程demo/order-service/完整微服务 Demoreport/微服务技术选型报告.md
五、面试高频问题预告
- Spring 怎么解决循环依赖?为什么是三级缓存而不是两级?
@Transactional什么时候失效?- Spring Boot 自动装配原理?自己怎么实现一个 Starter?
- Spring Cloud 各组件作用?负载均衡怎么实现?
- Seata 的 AT 模式怎么做?与 TCC 的对比?