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 升级问题
posted @ 2026-02-28 08:17  111阳  阅读(54)  评论(0)    收藏  举报