🚪 Spring 入门篇(零基础版)
框架是什么 · Spring 解决什么问题 · IoC/AOP/事务 白话版 · 第一个 Spring Boot 程序
1. "框架"是什么?为什么 Java 项目都用 Spring?
🏗️ 类比——盖房子:
不用框架 = 从搬砖和水泥开始盖房(每个项目都从 new 连接、写配置、处理底层开始)
用框架 = 用现成的"毛坯房 + 水电管道"(框架搭好了骨架,你只需要装修:写业务代码)
Spring = Java 界最流行的"毛坯房":Web 功能、数据库、事务、配置全都帮你搭好。
不用框架 = 从搬砖和水泥开始盖房(每个项目都从 new 连接、写配置、处理底层开始)
用框架 = 用现成的"毛坯房 + 水电管道"(框架搭好了骨架,你只需要装修:写业务代码)
Spring = Java 界最流行的"毛坯房":Web 功能、数据库、事务、配置全都帮你搭好。
Spring 是什么:一个"管理对象"的框架——你的对象(Service、Mapper 等)交给它创建、组装、管理,你专注写业务。
Spring 全家桶:
- Spring Core:核心——IoC 容器(管理对象)
- Spring MVC:做 Web 接口(接收 HTTP 请求)
- Spring JDBC / MyBatis 集成:操作数据库
- Spring Boot:一键启动的"全家桶"——配置自动搞定(现在主流)
- Spring Cloud:微服务全家桶(分布式模块涉及)
🎯 记住
- 框架 = 半成品工程,你填业务进去;Spring 是 Java 后端的事实标准
- 现在学 Spring = 直接学 Spring Boot(更省事,自动配置)
- 别怕"框架黑魔法":核心就是"容器帮你创建和管理对象"
2. IoC(控制反转)到底是什么?(面试第一问)
🍽️ 类比——餐厅点餐:
没有 IoC:你要吃饭,得自己买菜、洗菜、做菜(自己 new 对象、自己管理依赖)
有 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 就是"给一批方法统一加前置/后置动作",不用在每个方法里重复写。
AOP 就是"给一批方法统一加前置/后置动作",不用在每个方法里重复写。
事务(@Transactional):一组操作要么全成功、要么全失败。
💸 类比——转账:从 A 扣 100 到 B 加 100——
如果扣了 A 的钱但给 B 加钱失败 → 钱就凭空消失了!
事务保证:要么两步都成功,要么都回滚(A 的钱也不扣)。
Spring 里一行 @Transactional 就搞定,原理是 AOP 帮你拦截。
如果扣了 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 接口
- 访问 start.spring.io(Spring 官方初始化器)→ 选 Java 17 + Spring Web → 下载解压
- IDEA 打开项目,等依赖下载完
- 新建一个 Controller 类:
HelloController.java
import org.springframework.web.bind.annotation.*;
@RestController // 这是一个"接口类"
public class HelloController {
@GetMapping("/hello") // 浏览器访问 /hello 时调用
public String hello() {
return "你好,Spring!";
}
}
- 运行主类(Application),控制台看到 "Tomcat started on port 8080"
- 浏览器打开
http://localhost:8080/hello→ 看到"你好,Spring!"