16

  1. 自动配置原理
  • @SpringBootApplication  =  @Configuration  +  @EnableAutoConfiguration  +  @ComponentScan
  • @EnableAutoConfiguration  通过  SpringFactoriesLoader  加载  META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports  中配置的自动配置类
  • 条件注解: @ConditionalOnClass 、 @ConditionalOnBean 、 @ConditionalOnMissingBean 、 @ConditionalOnProperty  控制配置生效
  • 自动配置优先级:用户配置 > 自动配置,可通过  spring.autoconfigure.exclude  排除指定自动配置
  1. 启动流程与扩展机制

1. 启动入口: SpringApplication.run()  先创建  SpringApplication  实例,再执行  run() 
2. 关键阶段:

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