17
一、自动配置原理(最核心难点)
- @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
- 自动配置流程:
1. @EnableAutoConfiguration 导入 AutoConfigurationImportSelector
2. 扫描所有 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
3. 按 @Conditional 条件(@ConditionalOnClass、@ConditionalOnMissingBean等)过滤
4. 自动配置类生效,装配Bean;用户配置 > 自动配置 - 难点:配置黑盒、自动配置冲突、自定义覆盖、条件不生效排查
二、循环依赖与三级缓存(高频面试+排查难点)
- 默认只支持单例Bean循环依赖(A→B→A)
- 三级缓存机制:
- 一级: singletonObjects (完整Bean)
- 二级: earlySingletonObjects (早期暴露对象,无代理)
- 三级: singletonFactories (工厂,生成代理)
- 不支持场景:
- 原型Bean(@Scope("prototype"))
- 构造器注入循环(必须用@Lazy或重构)
- 代理+循环依赖(AOP代理会导致早期对象不一致)
三、Spring Boot 3.x 升级大坑(实战必踩)
- Java 17 强制(不兼容Java 8)
- javax → jakarta 包名全改(Servlet、JPA、Validation等)
- Spring Security 重构:
- WebSecurityConfigurerAdapter 移除
- authorizeRequests() → authorizeHttpRequests()
- antMatchers() → requestMatchers() ,默认行为变严格
- 配置校验更严:属性名、缩进、类型不匹配直接启动失败
四、AOP 与代理机制(原理+坑点)
- Spring AOP 基于动态代理:
- 接口 → JDK动态代理
- 无接口 → CGLIB代理(需依赖cglib)
- 坑点:
- 同类内部方法调用(this.xxx())不触发AOP(无代理)
- 私有方法、static方法不支持AOP
- 循环依赖+AOP:早期对象与代理对象不一致,易出问题
五、配置加载与优先级(多环境+覆盖规则)
- 配置优先级(从高到低):
命令行参数 → 系统环境变量 → application-{profile}.yml → application.yml → 自动配置默认值 - 多环境管理难点:
- 配置分散、重复、敏感信息泄露
- 生产环境建议用 配置中心(Nacos/Apollo)+ 分层配置
- 坑点:
- 配置项拼写错误、类型不匹配(Spring Boot 3 直接报错)
- 自动配置与自定义Bean冲突(@ConditionalOnMissingBean 不生效)
六、依赖冲突与版本管理(90%开发者踩过)
- 冲突原因:Starter传递依赖、第三方库版本不一致
- 表现: NoSuchMethodError 、 ClassNotFoundException 、启动失败
- 排查:
- mvn dependency:tree 看依赖树
- 用
排除冲突 - 统一版本: spring-boot-dependencies 管理、自定义BOM
七、Spring Security 高级配置(最复杂模块)
- 核心难点:
- 认证流程(UsernamePasswordAuthenticationFilter)
- 权限表达式(hasRole、hasAuthority、@PreAuthorize)
- 跨域CORS + CSRF + 会话管理
- OAuth2/JWT 集成(资源服务器、授权服务器)
- 自定义过滤器、异常处理、登录逻辑
八、Actuator 与生产监控(运维+排查)
- 端点安全:默认只开放 /health 、 /info ;需手动暴露并加权限控制
- 难点:
- 自定义健康检查(HealthIndicator)
- 指标采集(Micrometer)+ Prometheus + Grafana
- 日志管理(Logback/Log4j2)、线程池、内存泄漏排查
九、启动优化与性能调优(生产级难点)
- 启动慢原因:
- 自动配置类过多、Bean扫描范围大
- 循环依赖、AOP代理、反射开销
- 数据库连接池初始化、缓存预热
- 优化手段:
- 缩小 @ComponentScan 范围
- 懒加载(@Lazy)、延迟初始化
- 关闭不需要的自动配置(@SpringBootApplication(exclude=...))
- 分层启动、异步初始化
十、事务与分布式事务(业务+原理)
- 本地事务难点:
- 事务传播行为(REQUIRED、REQUIRES_NEW、NESTED)
- 事务不生效:非public方法、同类内部调用、异常未抛出、try-catch吞异常
- 事务超时、隔离级别、锁机制
- 分布式事务:
- Seata(AT/TCC/SAGA)、RocketMQ事务消息
- 最终一致性、幂等性设计
十一、内嵌容器与部署(生产坑点)
- Tomcat/Jetty/Undertow 配置:
- 线程池、连接数、超时、缓冲区
- HTTPS、HTTP2、跨域、压缩
- 部署难点:
- 优雅停机(Spring Boot 2.3+ 支持)
- Docker 容器化、K8s 健康检查
- WAR 包部署与外置容器兼容
十二、常见“诡异”问题排查(实战高频)
- 自动配置不生效:条件不满足、包扫描不到、配置覆盖
- Bean 循环依赖:构造器注入、原型Bean、AOP代理
- 事务不生效:方法非public、内部调用、异常被catch
- 启动慢:依赖过多、扫描范围大、循环依赖
- 版本冲突:依赖树混乱、Spring Boot 3 升级问题

浙公网安备 33010602011771号