SpringMVC框架和Spring框架

Spring MVC原理与Spring框架详解

一、Spring MVC工作原理

1.1 请求处理流程

1. 客户端发送URL请求
2. DispatcherServlet接收请求
3. 调用handlerMapping获取处理器
4. 循环HandlerMap执行一个元素
5. 执行前置拦截器
6. 调用目标Controller方法
7. 执行后置拦截器
8. 目标方法返回一个逻辑地址(如:return "index")
9. 获取逻辑地址
10. 渲染页面(逻辑地址 → 物理地址)
11. 生成静态页面返回给客户端

1.2 视图渲染流程

逻辑地址:index
物理地址生成:前缀 + 逻辑地址 + 后缀
示例:/WEB-INF/jsp/user/ + index + .jsp → /WEB-INF/jsp/user/index.jsp

二、Spring框架核心概念

2.1 IOC容器(控制反转)

概念:将对象的创建、初始化、销毁等生命周期管理交给Spring容器,而不是由开发者手动管理。

工作原理

1. 启动时加载配置文件或扫描注解
2. 创建所有标注了特定注解的类的实例
3. 将这些实例放入IOC容器中
4. 当需要使用时,从容器中获取

2.2 DI依赖注入

概念:在运行时,Spring容器自动将依赖对象注入到被依赖对象中。

实现方式

  • 注解注入:使用@Autowired注解
  • XML配置注入:在配置文件中定义

示例

@Autowired
private Service service;
// Spring会自动将Service的实例注入到service变量中

2.3 四大注解

注解 作用 适用场景
@Controller 标记控制器类 MVC控制器
@Service 标记服务层类 业务逻辑层
@Repository 标记数据访问层类 DAO层
@Component 标记通用组件类 其他组件

2.4 @Mapper注解

来源:MyBatis提供

作用

  • 修饰Mapper接口,不再需要编写实现类
  • 自动生成一个该接口的实现类
  • 将生成的实现类放入IOC容器中

三、AOP面向切面编程

3.1 核心概念

AOP的核心概念如下:

概念 解释 图片位置
连接点 可以被拦截的点(方法) Service中的方法A、B
切点 实际被拦截的连接点 方法A
植入方法 切入到切点的代码 before A、after A
切面 通过切点表达式连接连接点和植入方法 底部

3.2 执行流程

1. 客户端调用目标方法(如Service的方法A)
2. AOP拦截器拦截方法调用
3. 执行前置植入方法(before A)
4. 执行目标方法(方法A)
5. 执行后置植入方法(after A)
6. 返回结果给客户端

3.3 应用场景

  • 日志记录:记录方法调用的参数、返回值、执行时间等
  • 事务管理:在方法执行前后开启/提交事务
  • 权限验证:在方法执行前验证用户权限
  • 异常处理:统一处理方法执行过程中的异常

四、Spring三层架构

4.1 架构层次

Spring项目的三层架构如下:

┌─────────────────┐
│  Controller层   │ → 处理请求,调用Service
├─────────────────┤
│    Service层    │ → 业务逻辑,调用Mapper
├─────────────────┤
│    Mapper层     │ → 数据访问,操作数据库
└─────────────────┘

4.2 依赖关系

// Controller依赖Service
@Controller
public class EmpController {
    @Autowired
    private EmpService service;
}

// Service依赖Mapper
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper mapper;
}

// Mapper由MyBatis管理
@Mapper
public interface EmpMapper {
    List<Emp> findAll();
}

五、工作原理总结

5.1 Spring MVC请求处理完整流程

1. 客户端发送HTTP请求
2. DispatcherServlet接收请求
3. HandlerMapping根据URL找到对应的Controller方法
4. 执行前置拦截器
5. 调用目标Controller方法处理业务逻辑
6. Controller调用Service层方法
7. Service调用Mapper层方法操作数据库
8. Mapper返回数据给Service
9. Service处理业务逻辑后返回给Controller
10. Controller返回逻辑视图名
11. ViewResolver解析逻辑视图名为物理视图路径
12. 执行后置拦截器
13. 渲染视图,生成HTML响应
14. DispatcherServlet返回响应给客户端

5.2 Spring容器启动流程

1. 加载Spring配置文件或扫描注解
2. 初始化IOC容器
3. 注册BeanDefinition(Bean的定义信息)
4. 实例化所有标注了四大注解的类
5. 执行依赖注入
6. 执行初始化方法(如@PostConstruct)
7. 容器就绪,等待请求

posted on 2026-01-28 20:31  LVjiani  阅读(0)  评论(0)    收藏  举报

导航