1. Controller层(控制层)
• 功能:
负责接收和处理HTTP请求,协调客户端与业务逻辑之间的交互。
• 核心职责:
• 请求处理:解析HTTP请求参数(如URL参数、Body数据、Headers)。
• 路由分发:根据请求路径(@RequestMapping
)调用对应的Service方法。
• 响应生成:返回格式化数据(如JSON、XML)或视图(如HTML页面)。
• 输入校验:验证请求参数的合法性(如使用@Valid
注解)。
• 示例代码:
@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@PostMappingpublic ResponseEntity<UserDTO> createUser(@RequestBody @Valid UserDTO userDTO) {UserDTO savedUser = userService.createUser(userDTO);return ResponseEntity.ok(savedUser);}
}
• 常见注解:
@RestController
, @RequestMapping
, @GetMapping
, @PostMapping
, @RequestBody
, @ResponseBody
。
2. Service层(服务层)
• 功能:
封装核心业务逻辑,协调数据操作和事务管理。
• 核心职责:
• 业务规则实现:处理复杂的业务逻辑(如订单结算、权限校验)。
• 事务管理:通过@Transactional
保证数据库操作的原子性。
• 依赖整合:调用多个Repository或外部服务(如第三方API)。
• 异常处理:抛出业务异常(如UserNotFoundException
),由Controller统一捕获。
• 示例代码:
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactionalpublic UserDTO createUser(UserDTO userDTO) {if (userRepository.existsByEmail(userDTO.getEmail())) {throw new EmailAlreadyExistsException("Email已存在");}User user = UserMapper.toEntity(userDTO);User savedUser = userRepository.save(user);return UserMapper.toDTO(savedUser);}
}
• 常见注解:
@Service
, @Transactional
。
3. Repository层(数据访问层)
• 功能:
直接与数据库交互,提供数据的增删改查(CRUD)操作。
• 核心职责:
• 数据持久化:通过ORM框架(如Spring Data JPA、MyBatis)操作数据库。
• 查询封装:定义自定义查询方法(如findByEmail
)。
• 数据缓存:集成缓存机制(如Redis)提升性能。
• 示例代码:
public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByEmail(String email);@Query("SELECT u FROM User u WHERE u.status = :status")List<User> findActiveUsers(@Param("status") String status);
}
• 常见注解:
@Repository
(通常可省略,因JPA接口默认实现)、@Query
。
4. Model层(模型层)
• 功能:
定义数据结构,包括实体(Entity)、数据传输对象(DTO)等。
• 核心职责:
• 数据表示:
◦ Entity:映射数据库表结构(如@Entity
)。
◦ DTO:封装请求/响应数据,避免暴露实体细节。
◦ VO:视图对象,适配前端展示需求。
• 数据校验:通过注解定义字段约束(如@NotBlank
, @Email
)。
• 示例代码:
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(unique = true)private String email;// Getters and Setters
}public class UserDTO {@NotBlank@Emailprivate String email;// Getters and Setters
}
• 常见注解:
@Entity
, @Table
, @Column
, @NotBlank
, @Email
。
各层协作流程
以用户注册功能为例:
- Controller层:接收
POST /api/users
请求,解析请求体中的UserDTO
。 - Service层:校验邮箱唯一性,调用
UserRepository
保存用户实体,返回UserDTO
。 - Repository层:执行SQL插入操作,将
User
实体持久化到数据库。 - Model层:定义
User
实体和UserDTO
的结构,确保数据一致性。
分层优势
- 解耦与维护性:各层职责单一,修改业务逻辑不影响数据访问逻辑。
- 可测试性:可独立测试Controller(MockMVC)、Service(Mock Repository)、Repository(内存数据库)。
- 代码复用:Service层封装通用逻辑,避免Controller重复代码。
- 安全性:DTO隔离数据库实体,防止敏感字段(如密码哈希)暴露给前端。
通过这种分层设计,Spring应用能够实现高内聚、低耦合的架构,提升开发效率和系统可维护性。