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