16
- 自动配置原理
- @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
- @EnableAutoConfiguration 通过 SpringFactoriesLoader 加载 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中配置的自动配置类
- 条件注解: @ConditionalOnClass 、 @ConditionalOnBean 、 @ConditionalOnMissingBean 、 @ConditionalOnProperty 控制配置生效
- 自动配置优先级:用户配置 > 自动配置,可通过 spring.autoconfigure.exclude 排除指定自动配置
- 启动流程与扩展机制
1. 启动入口: SpringApplication.run() 先创建 SpringApplication 实例,再执行 run()
2. 关键阶段:
- 加载 ApplicationContextInitializer 、 ApplicationListener
- 环境准备 ConfigurableEnvironment
- 创建上下文 ConfigurableApplicationContext
- 刷新上下文 refresh() ,完成 Bean 加载、自动配置、后置处理
3. 扩展点: - ApplicationContextInitializer :上下文刷新前初始化
- ApplicationRunner / CommandLineRunner :容器启动后执行
- BeanFactoryPostProcessor :Bean 定义加载后、实例化前处理
- BeanPostProcessor :Bean 实例化、依赖注入后、初始化前后增强
- 依赖注入与 Bean 生命周期
- 依赖注入方式:构造器注入(推荐,不可变、依赖明确)、Setter 注入、字段注入(不推荐)
- 循环注入:
- 单例 Bean 默认通过三级缓存解决循环依赖
- 多例 @Scope("prototype") 无法解决循环依赖
- 构造器循环依赖无法解决,需重构或延迟注入
- 生命周期:
实例化 → 依赖注入 → Aware 接口 → BeanPostProcessor#postProcessBeforeInitialization → @PostConstruct → InitializingBean#afterPropertiesSet → 自定义 init 方法 → BeanPostProcessor#postProcessAfterInitialization → 销毁( @PreDestroy 、 DisposableBean )
- 事务管理高级特性
- 事务实现:AOP 代理, DataSourceTransactionManager ,基于 ThreadLocal 绑定连接
- 传播机制(核心):
- REQUIRED :有则加入,无则新建(默认)
- REQUIRES_NEW :新建事务,挂起当前事务
- NESTED :嵌套事务,保存点回滚
- SUPPORTS 、 MANDATORY 、 NOT_SUPPORTED 、 NEVER
- 隔离级别:
DEFAULT (数据库默认)、 READ_UNCOMMITTED 、 READ_COMMITTED 、 REPEATABLE_READ 、 SERIALIZABLE - 失效场景:
非 public 方法、同类内部调用、异常被 catch、多线程、多数据源未指定事务管理器、Bean 未被 Spring 管理
- AOP 原理与使用
- 动态代理:JDK 动态代理(接口)、CGLIB(类,通过继承),SpringBoot2.0 默认 CGLIB
- 核心概念:切点 @Pointcut 、通知 @Before / @After / @AfterReturning / @AfterThrowing / @Around
- 执行顺序:
@Around 前 → @Before → 目标方法 → @Around 后 → @After → @AfterReturning - 同类方法调用失效:需通过 AopContext 或注入自身代理解决
- 配置文件与外部化配置
- 配置优先级:命令行参数 > 外部配置文件 > 内部 application.yml > application.properties
- 多环境切换: spring.profiles.active=dev/test/prod
- 配置绑定:
- @Value :简单属性注入
- @ConfigurationProperties(prefix="xxx") :批量绑定,支持宽松绑定、校验
- 配置刷新:结合 SpringCloud Config/Nacos 实现动态刷新, @RefreshScope 生效
- Web 容器与请求处理
- 内置容器:Tomcat(默认)、Jetty、Undertow,可通过排除依赖切换
- 请求流程:
DispatcherServlet → HandlerMapping → HandlerAdapter → 控制器 → HandlerExceptionResolver → ViewResolver - 异常处理:
@RestControllerAdvice + @ExceptionHandler 全局统一异常处理 - 消息转换器: HttpMessageConverter ,自定义可实现 JSON 序列化、脱敏、格式化
- 异步、定时与线程池
- 异步: @EnableAsync + @Async ,默认 SimpleAsyncTaskExecutor ,建议自定义 ThreadPoolTaskExecutor
- 定时: @EnableScheduling + @Scheduled(cron/ fixedRate/ fixedDelay)
- 线程池配置:核心线程、最大线程、队列、拒绝策略、线程名前缀,避免 OOM 和上下文切换开销
- 整合 MyBatis-Plus 高级
- MapperScannerConfigurer 扫描 Mapper 接口,动态代理生成实现
- 分页:配置 MybatisPlusInterceptor + PaginationInnerInterceptor
- 乐观锁: @Version 注解,基于版本号实现,防止并发更新覆盖
- 自动填充: MetaObjectHandler 实现 create_time 、 update_time 自动赋值
- 性能与生产优化
- 懒初始化: spring.main.lazy-initialization=true 减少启动时间,降低内存
- 热部署: spring-boot-devtools ,生产环境禁用
- 日志:使用 logback/log4j2,关闭 debug 日志,异步日志提升吞吐
- 监控: spring-boot-starter-actuator 暴露健康、指标、线程、Bean 信息
- 打包: spring-boot-maven-plugin 打包可执行 JAR,分层构建减小镜像体积

浙公网安备 33010602011771号