14
- 启动原理:SpringApplication run 流程
1. 判定是否为 Web 应用(Reactive / Servlet)
2. 加载并初始化 SpringFactoriesLoader ,加载所有 META-INF/spring.factories
3. 创建并初始化 ApplicationContext
4. 执行 ApplicationContextInitializer 初始化
5. 加载所有自动配置类 AutoConfiguration
6. 执行 BeanDefinition 注册、依赖注入
7. 执行 ApplicationRunner 、 CommandLineRunner
8. 启动内置 Web 容器(Tomcat/Jetty/Undertow)
重点难点:
- SPI 机制与 SpringFactoriesLoader
- @Conditional 条件装配原理
- BeanFactoryPostProcessor、BeanPostProcessor 执行时机与区别
- 自动配置原理(面试必考)
核心:
- @EnableAutoConfiguration
- @Import(AutoConfigurationImportSelector.class)
流程:
1. 从 spring-boot-autoconfigure 下读取所有自动配置类
2. 通过 @Conditional 系列注解判断是否生效
3. 绑定 xxxProperties 读取配置文件
4. 向容器注册自动配置好的 Bean
难点:
- 如何手写一个 Starter
- 如何禁用某个自动配置
- @ConditionalOnBean / OnClass / OnMissingBean / OnProperty 执行顺序与坑
- 内嵌 Tomcat 启动与替换原理
1. SpringBoot 通过 ServletWebServerFactory 创建容器
2. 自动配置 TomcatServletWebServerFactory
3. 启动时创建 Tomcat 实例并绑定端口
难点:
- 如何替换成 Undertow/Jetty
- Tomcat 线程池、连接器、最大连接数调优
- 容器启动失败、端口冲突、优雅停机原理
- Bean 生命周期(深度)
精简硬核版:
1. 实例化(反射)
2. 填充属性 @Autowired、@Value
3. 执行 BeanNameAware 、 BeanFactoryAware
4. 执行 BeanPostProcessor#postProcessBeforeInitialization
5. 执行 @PostConstruct / InitializingBean#afterPropertiesSet / init-method
6. 执行 BeanPostProcessor#postProcessAfterInitialization (AOP 代理在这里生成)
7. 容器关闭: @PreDestroy 、 DisposableBean
难点:
- AOP 代理为什么不能作用于自身调用方法?
- this 调用与代理对象区别
- 循环依赖解决原理(三级缓存)
- 循环依赖与三级缓存(极高频难点)
Spring 解决单例+Setter 注入的循环依赖:
- 一级缓存:成品 Bean
- 二级缓存:早期半成品 Bean(未完成初始化)
- 三级缓存: ObjectFactory 延迟创建代理
关键点:
- 构造器注入无法解决循环依赖
- 多例 Bean 不解决循环依赖
- AOP + 循环依赖时,代理创建时机
- SpringBoot 事务原理
核心:
- @EnableTransactionManagement
- TransactionInterceptor 拦截
- AOP 环绕通知
流程:
1. 开启事务
2. 业务执行
3. 异常回滚 / 正常提交
4. 释放连接
难点坑点:
- private 方法、final 方法事务不生效
- this.方法() 不生效
- 非 RuntimeException 默认不回滚
- 事务传播机制 REQUIRED、REQUIRES_NEW、NESTED 区别与场景
- SpringBoot 整合 MyBatis 原理
- @MapperScan 扫描 Mapper 接口
- MapperFactoryBean 生产 Mapper 代理对象
- SqlSessionTemplate 线程安全的 SqlSession
难点:
- 为什么 Mapper 是接口却能被注入?
- 一级缓存、二级缓存机制与坑
- 分页插件 PageHelper 原理
- SpringBoot 配置加载优先级(高级)
加载顺序(从低 → 高):
1. 配置文件
2. 系统环境变量
3. 命令行参数
4. @TestPropertySource
5. JVM 参数
难点:
- 不同环境(dev/test/prod)配置覆盖规则
- 配置加解密原理(jasypt)
- 优雅停机(Graceful Shutdown)
关键点:
- 配置: server.shutdown=graceful
- 容器收到停机信号 → 不再接收新请求 → 等待已有请求处理完 → 关闭
难点:
- 如何保证任务不丢失
- 结合 @PreDestroy、@Async 线程池关闭
- SpringBoot 监控与扩展
- Actuator 端点原理
- SpringBoot 自定义 Starter 完整流程
- ImportBeanDefinitionRegistrar 手动注册 Bean
- FactoryBean 与 BeanFactory 区别
- 线程池与 @Async 高级
难点:
- 如何自定义线程池并替换默认
- 线程池参数:核心线程、最大线程、队列、拒绝策略
- 异步方法事务不生效问题
- 线程上下文丢失(如 RequestContext)
- SpringBoot 常见性能调优(偏难)
- JVM 参数调优(堆、元空间、GC)
- Tomcat 线程池调优
- 连接池(HikariCP)最优配置
- 关闭不必要的自动配置
- 懒加载 spring.main.lazy-initialization=true 利

浙公网安备 33010602011771号