Spring 框架核心详解(2025-2026 主流认知版)
Spring 框架发展到今天(Spring Framework 6.x + Spring Boot 3.x 时代),其核心已经非常清晰,主要围绕以下6 大核心支柱构建,几乎所有高级功能都是在这 6 个基础上的组合与扩展。
一、Spring 核心六大支柱(必须记住的骨架)
| 排名 | 核心概念 | 英文名称 | 一句话本质作用 | 是否 Spring Boot 默认开启 | 2025-2026 重要程度 |
|---|---|---|---|---|---|
| 1 | 控制反转 / 依赖注入 | IoC / DI | 把“new 对象”的权利交给容器 | 是 | ★★★★★ |
| 2 | Bean 的生命周期与容器 | BeanFactory / ApplicationContext | 管理所有 Spring Bean 的创建、销毁、作用域等 | 是 | ★★★★★ |
| 3 | AOP(面向切面编程) | Aspect Oriented Programming | 在不改业务代码前提下插入横切逻辑(日志、事务等) | 是(但需加注解) | ★★★★☆ |
| 4 | @Configuration + Java 配置 | Java-based Configuration | 用纯 Java 代码替代 XML 配置 | 是(Spring Boot 主流) | ★★★★☆ |
| 5 | 自动装配与条件装配 | @Autowired / @Conditional | 自动找 bean + 根据条件决定是否创建 bean | 是 | ★★★★☆ |
| 6 | 核心注解驱动开发 | @Component / @Service / @Repository 等 | 声明式开发,替代传统 XML bean 定义 | 是 | ★★★★☆ |
二、最核心概念逐一拆解(通俗版 + 代码示例)
1. IoC 容器与 DI(最重要,占 Spring 灵魂 60%)
一句话:
你不用自己new,由 Spring 容器帮你创建对象并把依赖“注入”进来。
三种注入方式(2025 年主流写法)
@ServicepublicclassOrderService{// 方式1:字段注入(最常见,但不推荐用于生产)@AutowiredprivateUserRepositoryuserRepo;// 方式2:构造器注入(官方 2025 年最推荐写法)privatefinalPaymentServicepaymentService;@Autowired// Spring 4.3+ 后单参构造器可省略 @AutowiredpublicOrderService(PaymentServicepaymentService){this.paymentService=paymentService;}// 方式3:Setter 注入(适合可选依赖)privateEmailServiceemailService;@Autowired(required=false)// 可选注入publicvoidsetEmailService(EmailServiceemailService){this.emailService=emailService;}}面试常问:为什么推荐构造器注入?
答:
- 依赖不可变(final)
- 依赖关系清晰(一目了然)
- 更容易做单元测试(直接 new)
- 避免循环依赖的部分场景
2. Bean 的作用域(Scope)
| 作用域 | 说明 | 使用场景 | 默认值? |
|---|---|---|---|
| singleton | 整个容器只有一份 | 几乎所有服务类、工具类 | 是 |
| prototype | 每次获取都创建一个新对象 | 有状态的 bean(如每次请求新对象) | 否 |
| request | 每个 HTTP 请求一个 bean | Web 环境下的 request 范围对象 | 否 |
| session | 每个 HTTP Session 一个 bean | 用户会话级别的对象 | 否 |
| application | 整个 ServletContext 一个 bean | 全局应用数据 | 否 |
| websocket | 每个 WebSocket 会话一个 bean | WebSocket 场景 | 否 |
代码写法(最常用两种)
@Component@Scope("prototype")// 每次 @Autowired 都新对象publicclassTicketGenerator{...}@Bean@Scope(value="request",proxyMode=ScopedProxyMode.TARGET_CLASS)publicShoppingCartshoppingCart(){...}3. AOP 的核心四要素(2025 年面试高频)
切面(Aspect)= 切点(Pointcut) + 通知(Advice)
通知类型(Advice 类型,按执行顺序):
- @Before 前置
- @AfterReturning 正常返回后
- @AfterThrowing 抛异常后
- @After 最终通知(类似 finally)
- @Around 环绕(最强大,可控制目标方法是否执行)
最常用环绕通知写法(事务、日志、权限的典型模板)
@Aspect@ComponentpublicclassLoggingAspect{@Around("@annotation(org.springframework.transaction.annotation.Transactional)")publicObjectlogTransaction(ProceedingJoinPointjoinPoint)throwsThrowable{log.info("开启事务:{}",joinPoint.getSignature());try{Objectresult=joinPoint.proceed();// 执行目标方法log.info("事务提交");returnresult;}catch(Throwablee){log.error("事务回滚",e);throwe;}}}4. Spring Boot 如何把这些核心简化到极致
| Spring 经典写法 | Spring Boot 时代写法(2025 主流) | 简化了什么 |
|---|---|---|
| XML + 定义 | @Component / @Service / @Repository | 告别 XML |
| ClassPathXmlApplicationContext | SpringApplication.run() | 一行启动整个容器 |
| @Autowired + @Qualifier | @Autowired + 首字母小写 bean 名自动注入 | 减少配置 |
| 手动配置 DataSource、JdbcTemplate | spring-boot-starter-jdbc 自动配置 | 零配置连接数据库 |
三、2025-2026 年 Spring 核心面试高频题(建议背熟)
- Spring IoC 容器启动过程中发生了什么?(BeanFactory → ApplicationContext → refresh() 十二大步骤)
- Bean 的生命周期完整 11 个阶段是哪些?(最常考前 7 个:实例化 → 属性填充 → 初始化前 → 初始化 → 使用 → 销毁前 → 销毁)
- @Autowired、@Resource、@Inject 的区别?
- Spring 如何解决循环依赖?(三级缓存机制)
- AOP 的底层实现原理?(动态代理:JDK Proxy vs CGLIB)
- Spring Boot 自动配置的原理?(@EnableAutoConfiguration → spring.factories → Condition 条件装配)
四、一句话总结 Spring 核心
Spring 的本质就是:帮你管理对象(IoC)、帮你注入依赖(DI)、帮你在不改代码的情况下插入额外逻辑(AOP),然后用一堆约定优于配置的方式把这一切变得极简(Spring Boot)。
如果你想深入某一块(比如循环依赖三级缓存、AOP 动态代理源码、BeanFactory 与 ApplicationContext 区别、@Conditional 家族全家桶),可以直接告诉我,我继续展开~