提交学习笔记专用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
5.2 KiB

3 weeks ago
  1. Spring框架复习笔记整理以“三层架构”为核心
  2. Spring框架下的三层架构
  3. 一、三层架构核心概念
  4. 三层架构是项目后端开发的经典分层结构,它将业务逻辑按职责划分为三个独立层次,目的是降低代码耦合度、提高可维护性和可扩展性。这三个层次自上而下分别是**表现层(Controller)**、**业务逻辑层(Service)** 和**数据访问层(Dao)**,每层仅与上下相邻层交互,不跨层调用。
  5. 在Spring框架中,三层架构的实现完全依赖于IoC容器和注解,每层的Bean都由Spring统一管理,层与层之间通过依赖注入(@Autowired/@Resource)建立关联。
  6. 二、各层职责与Spring实现
  7. 1. 表现层(Controller层)
  8. 核心职责:接收前端请求、参数校验、调用Service层方法、封装响应数据(如JSON)返回给前端。它是用户与系统交互的入口,不处理复杂业务逻辑。
  9. Spring实现方式:
  10. 使用`@Controller`或`@RestController`注解声明类为表现层Bean,纳入Spring IoC容器。
  11. 通过`@RequestMapping`、`@GetMapping`、`@PostMapping`等注解映射前端请求路径和请求方式。
  12. 方法参数通过`@RequestParam`(获取URL参数)、`@RequestBody`(获取JSON请求体)等注解接收前端数据。
  13. 2. 业务逻辑层(Service层)
  14. 核心职责:处理核心业务逻辑(如用户注册时的合法性校验、订单生成时的库存扣减)、协调多个Dao层方法完成复杂业务、事务管理(如转账时的原子性保证)。它是系统的“大脑”,承上启下。
  15. Spring实现方式:
  16. 使用`@Service`注解声明类为业务层Bean,纳入IoC容器。
  17. 业务层通常包含“接口+实现类”的结构(如`UserService`接口和`UserServiceImpl`实现类),接口定义方法,实现类写具体逻辑,降低耦合。
  18. 通过`@Autowired`注入Dao层Bean,调用Dao层方法操作数据。
  19. 使用`@Transactional`注解声明事务,确保业务操作的原子性(如失败回滚)。
  20. 3. 数据访问层(Dao层/Repository层)
  21. 核心职责:直接与数据库交互,执行数据的CRUD操作(Create/Read/Update/Delete),不包含业务逻辑。它是系统与数据库之间的“桥梁”。
  22. Spring实现方式:
  23. 使用`@Repository`注解声明类为数据访问层Bean,纳入IoC容器(若使用MyBatis,`@Mapper`注解可替代,且需配置扫描路径)。
  24. 传统方式:Dao层通过Spring JDBC(如`JdbcTemplate`)执行SQL;实际开发中多结合MyBatis,通过XML或注解(`@Select`/`@Insert`)编写SQL。
  25. 不依赖Service层,仅对外提供数据操作方法,由Service层调用。
  26. 三、三层架构的请求流转流程
  27. 以“用户查询”功能为例,完整的请求流转如下:
  28. 1. 前端发送GET请求:`http://localhost:8080/user/1`,请求查询ID为1的用户。
  29. 2. Spring MVC拦截请求,根据`@RequestMapping("/user")`和`@GetMapping("/{id}")`,将请求分发到`UserController`的`getUserById`方法。
  30. 3. `UserController`通过`@PathVariable`接收参数`id=1`,调用注入的`UserService`的`getUserById`方法。
  31. 4. `UserService`(`UserServiceImpl`)调用注入的`UserDao`的`selectById`方法,请求数据。
  32. 5. `UserDao`执行SQL查询数据库,返回`User`对象给`UserService`。
  33. 6. `UserService`将`User`对象返回给`UserController`。
  34. 7. `UserController`将`User`对象封装成统一响应格式(如`Result<User>`),返回JSON给前端。
  35. 四、三层架构的优势与注意事项
  36. 1. 核心优势
  37. 低耦合:每层职责单一,修改某一层(如更换数据库,仅改Dao层)不影响其他层。
  38. 高可维护:代码按功能分层,定位问题时可快速锁定到具体层(如前端报错查Controller,数据错误查Dao)。
  39. 高可扩展:支持分层扩展,如增加“用户积分”功能,仅需新增`PointService`和`PointDao`,不修改现有代码。
  40. 2. 注意事项
  41. 禁止跨层调用:不能直接在Controller层调用Dao层,必须通过Service层中转,否则会破坏分层逻辑,增加耦合。
  42. 事务声明在Service层:事务必须加在Service层方法上,因为Service层是业务逻辑的处理单元,Controller层仅负责请求转发,不适合管理事务。
  43. Bean命名规范:各层Bean命名建议加前缀,如`UserController`、`UserService`、`UserDao`,提高代码可读性。
  44. 五、三层架构与MVC的区别
  45. 三层架构和MVC,两者本质是不同维度的设计思想,核心区别如下:
  46. | 对比维度 | 三层架构 | MVC |
  47. |---------- |---------------------------------------------|------------------------------------------------------|
  48. | 设计范围 | 后端代码分层(Controller/Service/Dao) | 前后端交互架构(Model/View/Controller) |
  49. | 核心目的 | 降低后端代码耦合,优化后端开发流程 | 分离前端视图与后端数据、逻辑,优化前后端交互 |
  50. | 对应关系 | 三层架构的“表现层(Controller)”对应MVC的“Controller”;三层架构的“Service+Dao”对应MVC的“Model”;MVC的“View”是前端页面(三层架构不包含前端) |