1. "框架"是什么?为什么 Java 项目都用 Spring?

🏗️ 类比——盖房子:
不用框架 = 从搬砖和水泥开始盖房(每个项目都从 new 连接、写配置、处理底层开始)
用框架 = 用现成的"毛坯房 + 水电管道"(框架搭好了骨架,你只需要装修:写业务代码)
Spring = Java 界最流行的"毛坯房":Web 功能、数据库、事务、配置全都帮你搭好。

Spring 是什么:一个"管理对象"的框架——你的对象(Service、Mapper 等)交给它创建、组装、管理,你专注写业务。

Spring 全家桶:

🎯 记住

  • 框架 = 半成品工程,你填业务进去;Spring 是 Java 后端的事实标准
  • 现在学 Spring = 直接学 Spring Boot(更省事,自动配置)
  • 别怕"框架黑魔法":核心就是"容器帮你创建和管理对象"

2. IoC(控制反转)到底是什么?(面试第一问)

🍽️ 类比——餐厅点餐:
没有 IoC:你要吃饭,得自己买菜、洗菜、做菜(自己 new 对象、自己管理依赖)
有 IoC:你点菜(声明需要什么),餐厅(容器)把菜做好端上来(自动注入依赖)
控制权从"你自己"反转给"容器"——这就是"控制反转"。

传统写法 vs Spring 写法:

对比感受 IoC
// ❌ 传统:Service 自己 new 依赖(自己买菜做饭)
class OrderService {
    private OrderDao dao = new OrderDaoImpl();  // 耦合死了
}

// ✅ Spring:声明依赖,容器注入(点菜等上菜)
@Service                       // 告诉 Spring:这个类由我管理(注册进容器)
class OrderService {
    @Autowired                 // 告诉 Spring:帮我注入 OrderMapper
    private OrderMapper mapper;
}

好处:代码解耦(换实现只改一处)、好测试(能注入假的)、统一管理。

🎯 先记住三个注解

  • @Service / @Component:把类注册给 Spring 管理(进容器)
  • @Autowired:让 Spring 把依赖"注入"进来
  • @Configuration + @Bean:用代码方式注册(进阶再说)

3. AOP 和事务是什么?(白话版)

AOP(面向切面编程):把"所有方法都要做的事"抽出来统一处理。比如日志、权限检查、统计耗时。

📋 类比——进校门打卡:每个学生进校门都要打卡(切面),而不是每个学生自己"表演"打卡。
AOP 就是"给一批方法统一加前置/后置动作",不用在每个方法里重复写。

事务(@Transactional):一组操作要么全成功、要么全失败。

💸 类比——转账:从 A 扣 100 到 B 加 100——
如果扣了 A 的钱但给 B 加钱失败 → 钱就凭空消失了!
事务保证:要么两步都成功,要么都回滚(A 的钱也不扣)。
Spring 里一行 @Transactional 就搞定,原理是 AOP 帮你拦截。
@Transactional 用法
@Service
class TransferService {
    @Transactional                    // 这个方法整体是一个事务
    public void transfer(int fromId, int toId, double money) {
        accountDao.deduct(fromId, money);   // 1. 扣钱
        accountDao.add(toId, money);        // 2. 加钱 —— 任一失败,1 也回滚
    }
}

🎯 记住

  • AOP = 给一批方法统一加"前后处理"(日志/权限/事务都是它的应用)
  • 事务 = 全成功或全回滚;@Transactional 是声明式事务
  • 面试常考"事务为什么失效"(自调用、异常被吞等)——transaction.html 页详解

4. 动手:5 分钟跑起第一个 Spring Boot 接口

  1. 访问 start.spring.io(Spring 官方初始化器)→ 选 Java 17 + Spring Web → 下载解压
  2. IDEA 打开项目,等依赖下载完
  3. 新建一个 Controller 类:
HelloController.java
import org.springframework.web.bind.annotation.*;

@RestController                       // 这是一个"接口类"
public class HelloController {

    @GetMapping("/hello")          // 浏览器访问 /hello 时调用
    public String hello() {
        return "你好,Spring!";
    }
}
  1. 运行主类(Application),控制台看到 "Tomcat started on port 8080"
  2. 浏览器打开 http://localhost:8080/hello → 看到"你好,Spring!"

🎯 学习路径

  • 本篇 → IoC 容器 → Bean 生命周期 → AOP → 事务 → Spring Boot → MVC
  • 学习顺序建议:先能跑通接口(MVC 页),再回头啃 IoC/Bean 原理(面试重点)
  • 配 MyBatis + MySQL 做一个完整的增删改查项目,比看十篇理论都管用

🎤 常见面试追问

  1. 什么是框架?为什么要用框架?——框架 = 搭好骨架的半成品工程,你填业务。好处:不用重复造轮子、约定统一、社区成熟。Spring 是 Java 后端事实标准。
  2. Spring 和 Spring Boot 的区别?——Spring 是基础框架(IoC/AOP/MVC);Spring Boot 是"开箱即用"的封装(自动配置 + starter + 内嵌服务器),现在开发直接用 Boot。
  3. 先学 Spring 还是 Spring Boot?——直接学 Boot 能快速跑起来,但原理(IoC/AOP/事务)还是 Spring 的——建议 Boot 上手 + 原理追根。

📖 名词解释(本页术语)

术语 大白话解释
框架(Framework)别人写好的半成品代码骨架,规定了程序的组织方式,你只需写业务部分。
IoC / DI控制反转 / 依赖注入:对象由容器创建和组装,你只管声明需要什么。
AOP面向切面:把日志/事务等公共逻辑抽出来统一织入。
@Service / @Autowired注册 Bean / 注入依赖的两个最常用注解。
@Transactional事务注解:方法内所有数据库操作要么全成功要么全回滚。
@RestController / @GetMapping写接口的注解:类上标 @RestController,方法上标路径(@GetMapping("/hello"))。
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。