← 返回首页
一、Spring 核心原理
IoC 控制反转
- 容器管理对象的创建和依赖关系,开发者通过 DI(依赖注入)获取对象
- 注入方式:构造器注入(推荐)、Setter 注入、字段注入(@Autowired)
- Bean 作用域:singleton(默认)/ prototype / request / session
- Bean 生命周期:实例化 → 属性填充 → Aware 回调 → BeanPostProcessor 前置 → InitializingBean → init-method → BeanPostProcessor 后置 → 使用 → destroy
AOP 面向切面
- 核心概念:切面(Aspect)、切点(Pointcut)、通知(Advice)、连接点(JoinPoint)
- 通知类型:@Before / @After / @AfterReturning / @AfterThrowing / @Around
- 实现方式:JDK 动态代理(接口)vs CGLIB(类继承,Spring Boot 默认)
- 应用场景:事务管理、日志记录、权限校验、缓存
事务管理
@Transactional 基于 AOP 代理实现,注意自调用失效问题
- 传播行为:REQUIRED(默认,加入当前事务)/ REQUIRES_NEW(新建事务)/ NESTED(嵌套事务)
- 隔离级别:READ_UNCOMMITTED / READ_COMMITTED / REPEATABLE_READ / SERIALIZABLE
- 事务失效场景:非 public 方法、自调用、异常被 catch、rollbackFor 未指定
二、Spring Boot
- 自动配置原理:
@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
- @EnableAutoConfiguration:通过
spring.factories(Boot 2.x)或 AutoConfiguration.imports(Boot 3.x)加载自动配置类
- 条件注解:@ConditionalOnClass / @ConditionalOnBean / @ConditionalOnProperty 控制配置生效
- 配置优先级:命令行参数 > application-{profile}.yml > application.yml > 默认值
- Starter 机制:引入 starter 依赖即自动配置,约定大于配置
- Actuator:/health、/metrics、/info 等端点,生产环境监控
三、Spring Cloud 微服务
- 注册中心:Nacos(推荐,AP/CP 可切换)/ Eureka(AP)/ Consul(CP)
- 配置中心:Nacos Config / Spring Cloud Config,支持动态刷新
- 负载均衡:Spring Cloud LoadBalancer(替代 Ribbon),轮询/随机/权重策略
- 远程调用:OpenFeign 声明式 HTTP 客户端,集成负载均衡和熔断
- 服务熔断:Sentinel(推荐)/ Resilience4j,熔断、限流、降级
- 网关:Spring Cloud Gateway(基于 WebFlux),路由、过滤、限流、鉴权
- 分布式事务:Seata(AT/TCC/Saga/XA 模式)
- 链路追踪:Micrometer Tracing + Zipkin / SkyWalking
四、Spring Security
- 核心架构:FilterChain → SecurityFilterChain → 一系列 Filter(认证、授权、异常处理)
- 认证流程:UsernamePasswordAuthenticationFilter → AuthenticationManager → AuthenticationProvider → UserDetailsService
- JWT 集成:无状态认证,Token 存储在客户端,服务端只做验签
- OAuth2:授权码模式(最安全)/ 客户端凭证模式 / 密码模式(已废弃)
- RBAC 权限模型:用户-角色-权限三级模型,@PreAuthorize 方法级鉴权
五、Spring 常见面试要点
- 循环依赖:三级缓存解决(singletonObjects → earlySingletonObjects → singletonFactories),构造器注入无法解决
- FactoryBean vs BeanFactory:FactoryBean 是创建 Bean 的工厂接口;BeanFactory 是 IoC 容器顶层接口
- Spring Boot 启动流程:创建 SpringApplication → 加载配置 → 创建 ApplicationContext → 自动配置 → 刷新容器 → 执行 Runner