Java 分层架构

Java 分层架构

一、Controller/ Service / Dao

这是现代企业级应用(尤其是 Java Web 应用)中常见的 分层架构模式,目的是解耦、提高可维护性和可测试性。

整体的架构图如下所示:

1
2
3
4
5
6
7
8
9
[客户端] 
↓ (HTTP 请求)
@Controller(控制器)
↓ 调用
@Service(业务逻辑层)
↓ 调用
@Mapper / @Repository(数据访问层,即 DAO)

[数据库]

1. DAO(Data Access Object)—— 数据访问层

职责:

  • 封装对数据库的 CRUD 操作
  • 只负责数据存取,不包含业务逻辑。

实现可以是原生 JDBC -> UserDao 接口 + 实现类或者 MyBatis -> @Mapper 接口

1
2
3
4
5
6
@Mapper
public interface UserMapper {
User selectById(Long id);
void insert(User user);
List<User> findAll();
}

DAO = 数据的“搬运工”,只管“拿”和“存”。

2. Service(业务逻辑层)

职责:

  • 实现 核心业务逻辑(如注册、支付、订单处理)。

  • 协调多个 DAO 操作(例如:注册用户 + 发送邮件 + 记录日志)。

无状态,可被多个 Controller 复用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Service
@Transactional
public class UserService {
@Autowired
private UserMapper userMapper;

public Long register(String name, String email) {
// 1. 校验逻辑(业务规则)
if (userMapper.existsByEmail(email)) {
throw new BusinessException("邮箱已存在");
}
// 2. 调用 DAO 保存数据
User user = new User(name, email);
userMapper.insert(user);
return user.getId();
}
}

Service = 业务的“大脑”,决定“做什么”和“怎么做”。

3. Controller(控制层)

职责:

  • 接收 HTTP 请求

  • 解析请求参数(JSON、路径变量、表单)

  • 调用 Service 执行业务

  • 封装响应结果(返回 JSON、跳转页面)

技术实现上一般是 Spring MVC 的 @RestController@Controller

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;

@PostMapping
public ResponseEntity<Long> register(@RequestBody RegisterRequest req) {
Long userId = userService.register(req.getName(), req.getEmail());
return ResponseEntity.ok(userId);
}
}

Controller = 系统的“门面”,负责“接客”和“传话”。

Ps. 传统 MVC (如早期 Spring MVC) ,Model 相当与这里的 Service + Dao + Entity, View 则是被独立出去,变成了前端(展示数据),Controller 上职责有一些变化(传统是协调 Model 和 View,而现在 Java web 中是负责接收 + 调用 Services)


Java 分层架构
https://dxblacksmith.github.io/2026/02/04/Java-分层架构/
作者
DxBlackSmith
发布于
2026年2月4日
许可协议