Spring Boot 三层架构【清晰易懂】

ops/2025/4/2 5:23:59/

Spring Boot 的三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:控制器层(Controller)、服务层(Service) 和 数据访问层(Repository)。这种分层架构有助于代码的模块化和复用,使应用程序更易于维护和扩展


一、表示层(Controller)

  • 含义:这一层是用户和系统交互的接口,是用户看到并使用的部分。一般由控制器(Controller)组成,负责接收用户请求和返回处理结果
  • 作用:表示层接收用户请求,把请求数据交给业务层处理,最后将业务层的结果返回给用户。它相当于应用的“前台”,负责和用户“对话”。

例子

java">package com.example.demo.controller;import com.example.demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@Autowiredprivate HelloService helloService;@GetMapping("/hello")public String hello() {return helloService.getMessage();}
}

在这个例子中,HelloController 接收用户的 HTTP 请求,并调用 HelloService 来获取数据,然后将结果返回给用户。


二、业务层(Service)

  • 含义:业务层包含了应用的核心逻辑,即系统如何处理数据和实现业务规则。它是整个系统的“大脑”。
  • 作用:业务层接收表示层传来的请求数据,执行具体的业务逻辑,比如计算、验证、状态更新等。处理完之后,它将结果返回给表示层。通过将业务逻辑集中在这一层,系统的核心规则更加明确,也便于后续修改和维护。

例子

java">package com.example.demo.service;import org.springframework.stereotype.Service;@Service
public class HelloService {public String getMessage() {return "Hello, Spring Boot!";}
}

在这个例子中,HelloService 提供了一个简单的业务逻辑方法 getMessage(),它返回一条消息。


三、数据访问层(Repository)

  • 含义:数据访问层负责和数据库打交道。它提供了读取、存储、更新和删除数据的接口。
  • 作用:数据访问层负责从数据库中取出数据,或者将数据存入数据库。它相当于系统的“数据存储员”,将数据管理的细节与业务逻辑分离开来,使得业务层不需要关注具体的数据操作。

例子: 假设我们有一个 User 实体类和一个 UserRepository 接口:

java">package com.example.demo.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// Getters and Setters
}
java">package com.example.demo.repository;import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

在这个例子中,UserRepository 是一个接口,它继承了 JpaRepository,提供了基本的数据库操作方法。

三层架构的好处

1. 模块清晰:每一层都有单一的职责,代码结构清晰。

2. 便于维护:各层相互独立,修改其中一层时不会影响其他层。

3. 便于测试:可以单独测试业务逻辑、数据访问等,方便调试和排错。

4. 提高代码复用:业务层和数据层的代码可以被多个界面或模块重复利用。

三层架构帮助我们将系统逻辑分隔开来,使得代码更易管理、扩展和维护,是一种构建稳定可靠应用的好方法。


完整的代码示例

假设我们要创建一个简单的用户管理系统,用户可以通过 HTTP 请求添加和获取用户信息。

1. 实体类(User)
java">package com.example.demo.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// Getters and Setters
}
2. 数据访问层(UserRepository)
java">package com.example.demo.repository;import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
3. 业务层(UserService)
java">package com.example.demo.service;import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public List<User> getAllUsers() {return userRepository.findAll();}public User saveUser(User user) {return userRepository.save(user);}
}
4. 表示层(UserController)
java">package com.example.demo.controller;import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}@PostMappingpublic User createUser(@RequestBody User user) {return userService.saveUser(user);}
}

总结

Spring Boot 的三层架构将应用程序分为控制器层、服务层和数据访问层,每一层都有明确的职责:

  • 控制器层:处理用户请求,调用服务层。

  • 服务层:处理业务逻辑。

  • 数据访问层:与数据库交互,执行数据操作。

这种分层架构有助于代码的模块化和复用,使应用程序更易于维护和扩展。

文章来源:https://blog.csdn.net/m0_73442527/article/details/146502616
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/ops/170854.html

相关文章

隐匿视角:七款局域网屏幕监控软件对企业数字神经系统架构的重塑效应探究

在当今竞争激烈的商业环境中&#xff0c;企业管理者对于全面掌握公司运营状况&#xff0c;尤其是员工在工作时间的状态有着强烈需求。局域网屏幕监控技术作为一种有效的管理手段&#xff0c;能够使管理者实时洞察员工的计算机操作行为&#xff0c;从而提升管理效率&#xff0c;…

SpringMVC 请求与响应处理详解

引言 在 Java Web 开发中&#xff0c;SpringMVC 作为 Spring 框架的重要模块&#xff0c;提供了强大的请求和响应处理机制。本文将深入探讨 SpringMVC 中请求和响应的处理方式&#xff0c;结合实际案例&#xff0c;帮助开发者更好地理解和应用这些功能。 一、SpringMVC 请求处…

游戏引擎学习第184天

"我们有所有的代码"α 我们将进行一个完整的游戏开发过程&#xff0c;并且会展示。我们从零开始编写引擎&#xff0c;所以我们涵盖的内容从最底层的代码到最高层次的模块都有。虽然我们不能说是“高层次high level”的内容&#xff0c;但我们确实拥有所有的代码&…

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…

故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码

基于改进螂优化算法&#xff08;MSADBO&#xff09;优化变分模态提取&#xff08;VME&#xff09;结合稀疏最大谐波噪声比解卷积&#xff08;SMHD&#xff09;进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中&#xff0c;机械设备的稳定运行…

循环神经网络 - 给网络增加记忆能力

为了处理时序数据并利用其历史信息&#xff0c; 我们需要让网络具有短期记忆能力。而前馈网络是一种静态网络&#xff0c;不具备这种记忆能力。在正式学习循环神经网络之前&#xff0c;我们先来了解一下给网络增加短期记忆能力的三种方法。 一、延时神经网络 延时神经网络&am…

PoE交换机如何助力智慧城市基础设施建设?

随着全球城市化的加速发展&#xff0c;智慧城市的概念正逐步成为现实。通过技术手段提升居民生活质量、优化城市运营并促进可持续发展已成为趋势。弹性且高效的网络是智慧城市基础设施的关键支撑&#xff0c;而以太网供电&#xff08;PoE&#xff09;交换机在构建这些网络中发挥…

在鸿蒙 ArkUI 中使用本地数据缓存

前言 在移动应用开发中&#xff0c;数据缓存是一个常见需求&#xff0c;尤其是当我们需要存储用户的偏好设置、临时数据或离线内容时。鸿蒙 ArkUI 提供了 Storage 模块&#xff0c;使得开发者可以轻松地将数据缓存到本地存储。本文将详细介绍如何在鸿蒙 ArkUI 中使用本地数据缓…