Spring 和 Spring MVC 技术笔记

一、Spring 核心概念
1. Spring 简介
Spring 是一个开源的 Java 企业级应用框架,提供了全面的基础设施支持,使开发者能够专注于业务逻辑的开发。
核心优势:
- 控制反转(IoC)容器
- 面向切面编程(AOP)
- 声明式事务管理
- 丰富的企业级集成
- 简化开发,提高生产力
2. Spring 模块架构
Spring 框架由多个模块组成,主要包括:
| 模块 | 描述 |
|---|---|
| Spring Core | 核心容器,提供 IoC 功能 |
| Spring AOP | 面向切面编程支持 |
| Spring Context | 应用上下文,提供企业级功能 |
| Spring JDBC | 简化 JDBC 操作 |
| Spring TX | 事务管理 |
| Spring Web | Web 应用支持 |
| Spring MVC | MVC 框架 |
| Spring Test | 测试支持 |

二、Spring IoC 容器
1. IoC 概念
控制反转(Inversion of Control):将对象的创建、依赖关系的管理等控制权从应用代码转移到容器。
依赖注入(Dependency Injection):IoC 的实现方式,通过构造器、setter 方法或字段注入依赖。
2. 核心容器接口
| 接口 | 描述 |
|---|---|
| BeanFactory | 基础容器接口,延迟加载 |
| ApplicationContext | 高级容器接口,立即加载,提供更多企业级功能 |
| WebApplicationContext | Web 环境下的应用上下文 |
3. Bean 定义方式
3.1 注解配置
@Component
public class UserService {
@Autowired
private UserDao userDao;
}
@Component
public class UserDaoImpl implements UserDao {
}

三、Spring AOP
1. AOP 概念
面向切面编程(Aspect-Oriented Programming):将横切关注点(如日志、事务、安全)与业务逻辑分离。
核心术语:
- Aspect(切面):横切关注点的模块化
- Join Point(连接点):程序执行的特定点
- Advice(通知):切面在特定连接点执行的动作
- Pointcut(切入点):匹配连接点的表达式
- Weaving(织入):将切面应用到目标对象的过程
2. 通知类型
| 通知类型 | 描述 |
|---|---|
| Before | 方法执行前 |
| After | 方法执行后(无论是否异常) |
| AfterReturning | 方法正常返回后 |
| AfterThrowing | 方法抛出异常后 |
| Around | 方法执行前后(可控制方法执行) |
3. 实现方式
3.1 注解方式
@Aspect
@Component
public class LogAspect {
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethods() {}
@Before("serviceMethods()")
public void beforeAdvice(JoinPoint joinPoint) {
System.out.println("方法执行前:" + joinPoint.getSignature().getName());
}
@Around("serviceMethods()")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("方法执行时间:" + (end - start) + "ms");
return result;
}
}

四、Spring MVC 架构
1. MVC 设计模式
MVC(Model-View-Controller):将应用分为三个部分:
- Model:数据模型,包含业务逻辑
- View:视图,展示数据
- Controller:控制器,处理请求,协调 Model 和 View
2. Spring MVC 架构
核心组件:
- DispatcherServlet:前端控制器,处理所有请求
- HandlerMapping:映射请求到处理器
- Controller:处理器,处理请求
- ModelAndView:模型和视图
- ViewResolver:解析视图
请求处理流程:
- 客户端发送请求到 DispatcherServlet
- DispatcherServlet 通过 HandlerMapping 找到对应的 Controller
- Controller 处理请求,返回 ModelAndView
- DispatcherServlet 通过 ViewResolver 解析视图
- 渲染视图,返回响应给客户端
五、Spring MVC 核心组件
1. Controller
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public String list(Model model) {
List<User> users = userService.findAll();
model.addAttribute("users", users);
return "user/list";
}
@PostMapping("/add")
public String add(User user) {
userService.add(user);
return "redirect:/user/list";
}
}
2. 常用注解
| 注解 | 描述 |
|---|---|
| @Controller | 标记控制器类 |
| @RestController | 标记 REST 控制器(@Controller + @ResponseBody) |
| @RequestMapping | 映射请求路径 |
| @GetMapping | 映射 GET 请求 |
| @PostMapping | 映射 POST 请求 |
| @PutMapping | 映射 PUT 请求 |
| @DeleteMapping | 映射 DELETE 请求 |
| @PathVariable | 获取路径参数 |
| @RequestParam | 获取请求参数 |
| @RequestBody | 获取请求体 |
| @ResponseBody | 返回 JSON 响应 |
| @ModelAttribute | 绑定请求参数到模型 |
浙公网安备 33010602011771号