news 2026/6/1 6:39:43

Spring Boot 从零入门:请求响应、三层架构与 IOC/DI 实践总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 从零入门:请求响应、三层架构与 IOC/DI 实践总结

Spring Boot 从零入门:请求响应、三层架构与 IOC/DI 实践总结

文章目录

  • Spring Boot 从零入门:请求响应、三层架构与 IOC/DI 实践总结
    • 1. 项目搭建与第一个接口
    • 2. 请求响应:参数接收全解析
      • 2.1 哪些参数必须掌握?
      • 2.2 不用 Postman,如何高效测试?
      • 2.3 常见参数示例代码
    • 4. 分层解耦:三层架构设计
      • 4.1 为什么需要分层?
      • 4.2 标准三层职责
    • 5. IoC + DI:彻底告别 `new` 关键字
      • 5.1 IoC 与 DI 概念
      • 5.2 注解驱动的改造步骤
      • 5.3 为什么推荐构造器注入?
    • 6. 统一响应格式(Result 封装)
    • 7. 总结和最后的话

1. 项目搭建与第一个接口

使用 IDEA 的 Spring Initializr 创建项目,依赖仅选择Spring Web
启动类HttpStuApplication自动生成。在controller包下创建HelloController

@RestControllerpublicclassHelloController{@RequestMapping("/hello")publicStringsayHello(){return"Hello, 请求响应学习开始!";}}

运行后浏览器访问http://localhost:8080/hello,输出文本 —— 标志着环境验证通过。


2. 请求响应:参数接收全解析

2.1 哪些参数必须掌握?

优先级参数类型注解使用频率
🔥 必须掌握简单参数@RequestParam(可省略)每天
🔥 必须掌握路径参数@PathVariable每天
🔥 必须掌握JSON 参数@RequestBody每天
✅ 常用实体参数无注解,自动封装经常
⚠️ 了解即可日期参数@DateTimeFormat偶尔
⚠️ 了解即可数组/集合参数@RequestParam+List偶尔

2.2 不用 Postman,如何高效测试?

IDEA 内置 HTTP Client:在项目根目录re新建test.http文件,写入请求,点击绿色箭头即可发送。

示例(JSON 参数测试):

POST http://localhost:8080/json Content-Type: application/json { "name": "张三", "age": 18 }

这种方法零安装、可保存、支持团队共享,非常适合学习阶段。

2.3 常见参数示例代码

@RestControllerpublicclassParamController{// 简单参数@GetMapping("/simple")publicStringsimple(@RequestParamStringname,Integerage){...}// 路径参数@GetMapping("/path/{id}")publicStringpath(@PathVariableIntegerid){...}// JSON 参数@PostMapping("/json")publicUserjson(@RequestBodyUseruser){...}// 实体参数(自动封装)@GetMapping("/user")publicUseruser(Useruser){returnuser;}}

注意:返回类型为String时 Spring 输出纯文本;返回对象/集合/Map 时自动转为 JSON。


4. 分层解耦:三层架构设计

4.1 为什么需要分层?

最初将所有代码写在 Controller 中,导致:

  • 重复代码(多个接口都要查用户)
  • 业务逻辑和请求处理混在一起
  • 更换数据源(例如从 Map 改为 MySQL)需要改动多处

4.2 标准三层职责

层级包名示例职责对象类型
表示层controller接收请求、参数校验、返回响应XxxController
业务层service业务逻辑、事务管理、调用 DAOXxxService+XxxServiceImpl
数据访问层dao/repository数据库 CRUD、模拟数据XxxDao+XxxDaoImpl

调用链
ControllerServiceDAO→ 数据 → 原路返回。


5. IoC + DI:彻底告别new关键字

5.1 IoC 与 DI 概念

概念含义比喻
IoC(控制反转)对象的创建控制权从程序员反转到 Spring 容器你不必自己new,告诉容器“我需要什么”即可
DI(依赖注入)容器在创建对象时,自动将依赖的对象赋值给字段容器帮你“接线”

5.2 注解驱动的改造步骤

原代码(耦合):

publicclassUserServiceImplimplementsUserService{privateUserDaouserDao=newUserDaoImpl();// 主动 new}

改造后(解耦):

@ServicepublicclassUserServiceImplimplementsUserService{privatefinalUserDaouserDao;@Autowired// Spring 4.3+ 单构造器可省略publicUserServiceImpl(UserDaouserDao){this.userDao=userDao;}}

同时为UserDaoImpl添加@Repository,为UserController中注入UserService

5.3 为什么推荐构造器注入?

注入方式代码量不可变性 (final)单元测试循环依赖检测推荐度
字段注入最少困难(需反射)容器内可能掩盖❌ 不推荐
Setter 注入中等一般⚠️ 可选
构造器注入稍多简单new传参启动时报错强烈推荐

构造器注入让依赖显式化、对象不可变、测试更友好。


6. 统一响应格式(Result 封装)

企业级接口通常不直接返回实体对象,而是返回统一结构的 JSON,方便前端全局拦截。

标准结构

{"code":1,"msg":"success","data":{"name":"张三","age":18}}

实现:创建utils/Result

publicclassResult{privateIntegercode;privateStringmsg;privateObjectdata;publicstaticResultsuccess(Objectdata){Resultr=newResult();r.setCode(1);r.setMsg("success");r.setData(data);returnr;}publicstaticResulterror(Stringmsg){Resultr=newResult();r.setCode(0);r.setMsg(msg);returnr;}// getter / setter 必须存在}

Controller 使用

@GetMapping("/user/{id}")publicResultgetUser(@PathVariableIntegerid){Useruser=userService.getUserById(id);if(user==null){returnResult.error("用户不存在");}returnResult.success(user);}

注意:Result 类必须有 getter/setter,否则 Spring 无法将字段序列化为 JSON。


7. 总结和最后的话

主题关键点
请求响应@RequestParam@PathVariable@RequestBody;测试用.http
三层架构Controller(请求/响应)、Service(业务)、DAO(数据)
面向接口编程接口定义契约,实现类可替换,上层只依赖接口
IoC/DI@Service/@Repository+@Autowired;推荐构造器注入
统一响应Result封装 code/msg/data,提供静态工厂方法
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 6:32:09

[智能体-170]:通用 AI 智能体标准架构与核心公式深度解析

通用 AI 智能体标准架构与核心公式深度解析这张图是全球 AI 行业公认的单智能体 "黄金标准架构",也是 LangGraph、AutoGPT、Devin 等所有主流智能体产品的底层设计原型。底部的数学公式Agent LLM Memory Tools Planning Action,用最简洁的…

作者头像 李华
网站建设 2026/6/1 6:31:11

机器学习完全指南:从理论基石到前沿实践的系统化解析

机器学习是人工智能的核心驱动力——它让计算机无需显式编程即可从数据中学习规律并进行预测或决策。从推荐系统到自动驾驶,从医疗诊断到金融风控,机器学习已渗透到现代社会的每一个角落。本文将从基本定义、核心分类、算法原理、模型评估与优化、工程实践到2026年前沿趋势,…

作者头像 李华
网站建设 2026/6/1 6:19:58

从图像识别到成本核算:程序员如何打造智能厨房助手

1. 项目概述:当程序员决定“下厨” 作为一名在代码世界里摸爬滚打了十多年的程序员,我常常觉得写代码和做菜有异曲同工之妙:都需要精确的配方(算法)、新鲜的食材(数据)、恰到好处的火候&#xf…

作者头像 李华
网站建设 2026/6/1 6:19:33

新手如何用ChatGPT从零构建全栈应用:React+Node.js实战

1. 项目缘起与核心目标那天下午,我盯着屏幕上闪烁的光标,脑子里全是甲骨文那些弯弯曲曲的笔画。我想做一个关于“甲骨文”(Jiaguwen)的卡牌游戏,一个简单的网页应用,它得有个小测验功能,一个展示…

作者头像 李华