当前位置: 首页 > news >正文

SpringBoot,IOC,DI,分层解耦,统一响应

目录

详细参考day05 web请求

1、BS架构流程

2、@RequestParam注解 完成参数名和形参的映射

3、controller接收json对象,使用@RequestBody注解

4、@PathVariable注解传递路径参数

5、@ResponseBody(return 响应数据) 

      @RestController源码

6、统一响应结果

7、分层解耦

8、IOC和DI

控制反转代码示例:

IOC四类注解:

DI:@Autowired自动装配

@Primary @Qualifier @Resource


详细参考day05 web请求

1、BS架构流程

2、@RequestParam注解 完成参数名和形参的映射

 

3、controller接收json对象,使用@RequestBody注解

  4、@PathVariable注解传递路径参数

就是在@RequestMapping中加参数名比如{id}

5、@ResponseBody(return 响应数据) 

@RestController源码

6、统一响应结果

每个方法的返回值 从return  string/arr[]/student ------》 变成 return Result.success(list);  

//响应统一格式的结果
@RequestMapping("/getAddr")
public Result getAddr(){
Address addr = new Address();
addr.setProvince("广东");
addr.setCity("深圳");
return Result.success(addr);
}
public class Result {private Integer code;//响应码,1 代表成功; 0 代表失败private String msg; //响应码 描述字符串private Object data; //返回的数据public Result() { }public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}//增删改 成功响应(不需要给前端返回数据)public static Result success(){return new Result(1,"success",null);}//查询 成功响应(把查询结果做为返回数据响应给前端)public static Result success(Object data){return new Result(1,"success",data);}//失败响应public static Result error(String msg){return new Result(0,msg,null);}}

7、分层解耦

分层就是分成了controller层、service层,dao层

controller层负责:接收前端发送的请求,对请求进行处理,并响应数据(调用service层

service层:处理具体的业务逻辑(调用dao层

dao层负责:负责数据的访问操作,包含数据的增、删、改、查

service层和dao层都是面向接口编程的,目的是解耦(进一步解耦使用 控制反转和依赖注入)。

首先会定义一个接口层,然后再去实现这个接口。

        接口定义业务规则(比如需要哪些方法,需要哪些数据)

        实现类负责实现具体的业务逻辑 



我们发现在上面controller中我们定义的是一个service接口,然后new的是一个接口的实现类,赋值给接口,这是面向接口编程。但若是我们更换了业务逻辑,想要换一个实现类,如下所示,此时我们就要去修改controller中的代码,非常的不方便,所以我们要使用ioc和di解耦。

8、IOC和DI

IOC:叫做控制反转,核心就是我们不用手写代码创建对象,而是交给IOC容器创建

DI:叫做依赖注入,就是说代码运行需要什么对象时,我们不去创建,而是让IOC容器自己提供

IOC创建,管理的对象,叫做bean对象。

控制反转代码示例:

IOC四类注解:

IOC 容器中, 每一个Bean都有一个属于自己的名字 ,可以通过注解的 value 属性指定 bean 的名字。如果没有指定, 默认为类名首字母小写
使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan扫描
@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解
@SpringBootApplication 中, 默认扫描的范围是SpringBoot启动类所在包及其子包

DI:@Autowired自动装配

@Autowired 注解,默认是按照 类型 进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作)
controller层需要service对象,就在代码内使用该注解,并定义一个service接口。
同dao。

@Primary @Qualifier @Resource

比如一个接口的两个实现类,由于自动装配找的接口对象,不使用额外注解就会报错。

@Primary 注解使用在接口的实现类中,service

@Qualifier使用在 调用者一级,比如controller,且必须和@Autowired一起使用,根据名字去找

@Resource注解和@Autowired注解是同级别的,只不过有区别

相关文章:

SpringBoot,IOC,DI,分层解耦,统一响应

目录 详细参考day05 web请求 1、BS架构流程 2、RequestParam注解 完成参数名和形参的映射 3、controller接收json对象,使用RequestBody注解 4、PathVariable注解传递路径参数 5、ResponseBody(return 响应数据) RestController源码 6、统一响…...

目标驱动学习python动力

文章目录 迟迟未开始的原因打破思维里的围墙抛砖引玉爬虫 结束词 迟迟未开始的原因 其实我也是很早就知道有python,当时听说这个用于做测试不错,也就一直没有提起兴趣,后来人工智能火了之后,再次接触python,安装好pyth…...

力扣-Hot100-回溯【算法学习day.39】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...

小熊派Nano接入华为云

一、华为云IoTDA创建产品 创建如下服务,并添加对应的属性和命令。 二、小熊派接入 根据小熊派官方示例代码D6完成了小熊派接入华为云并实现属性上传命令下发。源码:小熊派开源社区/BearPi-HM_Nano 1. MQTT连接代码分析 这部分代码在oc_mqtt.c和oc_mq…...

【linux硬件操作系统】计算机硬件常见硬件故障处理

这里写目录标题 一、故障排错的基本原则二、硬件维护注意事项三、关于最小化和还原出厂配置四、常见故障处理及调试五、硬盘相关故障六、硬盘相关故障:硬盘检测问题七、硬盘相关故障:自检硬盘报错八、硬盘相关故障:硬盘亮红灯九、硬盘相关故障…...

谈学生公寓安全用电系统的涉及方案

‌学生公寓安全 学生公寓安全用电系统的设计方案主要包括以下几个方面‌: ‌电气线路设计‌: ‌合理布线‌:确保所有电气线路按照国家或地区的电气安全标准进行设计,避免线路过载和短路。‌使用阻燃材料‌:选用阻燃或低…...

自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Go 语言数组

Go 语言数组 引言 Go 语言是一种静态类型、编译型语言,由 Google 开发,旨在提高多核处理器下的编程效率。数组作为 Go 语言中的一种基本数据结构,提供了存储一系列具有相同类型元素的能力。本文将深入探讨 Go 语言中数组的使用方法、特性以…...

13. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--完善TODO标记的代码

这篇文章特别短,短到可以作为一篇文章的一个章节,那让我们开始吧 一、编写代码 我们在代码中标记了大量的TODO标记,并且注明了这里暂时写死,等权限和授权完成后再改为动态获取这句话。那么到目前为止和权限有关的代码已经完成了…...

深入剖析Java内存管理:机制、优化与最佳实践

🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 深入剖析Java内存管理:机制、优化与最佳实践 一、Java内存模型概述 1. Java内存模型的定义与作…...

【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB

Amazon DynamoDB 是一种完全托管的 NoSQL 数据库服务,专为高性能和可扩展性设计,特别适合需要快速响应和高吞吐量的应用场景,如移动应用、游戏、物联网和实时分析等。 工作原理 Amazon DynamoDB 在任何规模下响应时间一律达毫秒级&#xff…...

Qt-常用的显示类控件

QLabel QLabel有如下核心属性&#xff1a; 关于文本格式的验证&#xff1a; 其中<b>xxx<b>&#xff0c;就是加粗的意思。 效果&#xff1a; 或者再把它改为markdown形式的&#xff1a; 在markd中&#xff0c;#就是表示一级标题&#xff0c;我们在加上##后&#x…...

LabVIEW内燃机缸压采集与分析

基于LabVIEW开发的内燃机缸压采集与分析系统结合高性能压力传感器和NI数据采集设备&#xff0c;实现了内燃机工作过程中缸压的实时监测与分析&#xff0c;支持性能优化与设计改进。文中详细介绍了系统的开发背景、硬件组成、软件设计及其工作原理&#xff0c;展现了完整的开发流…...

【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理

1.准备一个U盘或者SD卡&#xff08;插上读卡器&#xff09;&#xff0c;将U盘插入主机电脑&#xff0c;右键点击属性&#xff0c;查看U盘的文件系统确保是FAT32格式 2.右键单击ubuntu右下角图标&#xff0c;将U盘与虚拟机连接 参考链接 3. Ubuntu磁盘文件&#xff1a;/dev/s…...

VScode clangd插件安装

前提 在VScode中写C代码时&#xff0c;总会用到 C/C 这个插件&#xff0c;也就自然而然地使用了这个插件带来的代码跳转和代码提示功能。但是当代码变地很多时&#xff0c;就会变得非常慢。所以经过调查后弃用C/C 插件的这个功能&#xff0c;使用 clangd 这个插件来提示C代码和…...

【机器学习】- L1L2 正则化操作

目录 0.引言1.正则化的基本思想2.L1 正则化3.L2 正则化4.L1 与 L2 正则化的比较5.应用&#xff1a;控制模型复杂度6.超参数 λ \lambda λ 的选择7.总结 0.引言 在机器学习中&#xff0c;正则化是一种通过约束模型参数来控制模型复杂度的技术。它可以有效减少过拟合&#xff…...

Logback实战指南:基础知识、实战应用及最佳实践全攻略

背景 在Java系统实现过程中&#xff0c;我们不可避免地会借助大量开源功能组件。然而&#xff0c;这些组件往往功能丰富且体系庞大&#xff0c;官方文档常常详尽至数百页。而在实际项目中&#xff0c;我们可能仅需使用其中的一小部分功能&#xff0c;这就造成了一个挑战&#…...

基于python的机器学习(三)—— 关联规则与推荐算法

目录 一、关联规则挖掘 1.1 基本概念 1.2 Apriori算法 1.2.1 Apriori算法的原理 1.2.2 Apriori算法的实例 1.2.3 Apriori算法的程序实现&#xff08;efficient-apriori模块&#xff09; 1.3 FP-Growth算法 1.3.1 FP-Growth算法的原理 1.3.2 FP-Growth算法的实例 二、…...

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…...

模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同

很多手游多开玩家都是利用安卓模拟器实现手游多开&#xff0c;但是很多手游会限制ip&#xff0c;导致多开之后封号等问题&#xff0c;模拟器本身没有更换IP的功能&#xff0c;就需要通过第三方软件来实现 安卓模拟器概述 雷电模拟器、夜神模拟器、mum模拟器等都是目前市场上比较…...

hive的存储格式

1&#xff09; 四种存储格式 hive的存储格式分为两大类&#xff1a;一类纯文本文件&#xff0c;一类是二进制文件存储。 Hive支持的存储数据的格式主要有&#xff1a;TEXTFILE、SEQUENCEFILE、ORC、PARQUET 第一类&#xff1a;纯文本文件存储 textfile: 纯文本文件存储格式…...

鸿蒙学习高效开发与测试-应用程序框架(3)

文章目录 1、应用程序框架1、规范化后台进程管理2、原生支持分布式3、支持多设备的统一窗口管理4、 组件共享及面向对象5、逻辑与界面解耦6、灵活扩展机制2、HarmonyOS SDK1、 开放能力 Kit2、开放能力的检索和使用3、 方舟工具链4、前端编译器架构1、应用程序框架 应 用 程 序…...

什么命令可以查看数据库中表的结构

1. MySQL 查看表结构 sql 复制代码 DESCRIBE 表名; 或者&#xff1a; sql 复制代码 SHOW COLUMNS FROM 表名; 更详细的表信息 sql 复制代码 SHOW CREATE TABLE 表名; 2. PostgreSQL 查看表结构 sql 复制代码 \d 表名 列出表的字段及类型 sql 复制代码 SELECT column_name, da…...

django基于python 语言的酒店推荐系统

摘 要 酒店推荐系统旨在提供一个全面酒店推荐在线平台&#xff0c;该系统允许用户浏览不同的客房类型&#xff0c;并根据个人偏好和需求推荐合适的酒店客房。用户可以便捷地进行客房预订&#xff0c;并在抵达后简化入住登记流程。为了确保连续的住宿体验&#xff0c;系统还提供…...

【深度学习|onnx】往onnx中写入训练的超参或者类别等信息,并在推理时读取

1、往onnx中写入 在训练完毕之后&#xff0c;我们先使用torch.onnx.export() 导出onnx模型&#xff0c;然后我们再使用以下代码来往metadata中写入信息&#xff1a; # Metadatad {# stride: int(max(model.stride)),names: model.names,mean : [0,0,0],std : [1,1,1],normali…...

WebSocket详解、WebSocket入门案例

目录 1.1 WebSocket介绍 http协议&#xff1a; webSocket协议&#xff1a; 1.2WebSocket协议&#xff1a; 1.3客户端&#xff08;浏览器&#xff09;实现 1.3.2 WebSocket对象的相关事宜&#xff1a; 1.3.3 WebSOcket方法 1.4 服务端实现 服务端如何接收客户端发送的请…...

05_Spring JdbcTemplate

在继续了解Spring的核心知识前,我们先看看Spring的一个模板类JdbcTemplate,它是一个JDBC的模板类,用来简化JDBC的操作。 接下来以实际来进行说明 一、实例环境准备 数据库及表准备 我们在本地mysql中新增一个数据库test,并新增一张数据表:user create database if not…...

Bug:引入Feign后触发了2次、4次ContextRefreshedEvent

Bug&#xff1a;引入Feign后发现监控onApplication中ContextRefreshedEvent事件触发了2次或者4次。 【原理】在Spring的文档注释中提示到&#xff1a; Event raised when an {code ApplicationContext} gets initialized or refreshed.即当 ApplicationContext 进行初始化或者刷…...

最新‌VSCode保姆级安装教程(附安装包)

文章目录 一、VSCode介绍 二、VSCode下载 下载链接&#xff1a;https://pan.quark.cn/s/19a303ff81fc 三、VSCode安装 1.解压安装文件&#xff1a;双击打开并安装VSCode 2.勾选我同意协议&#xff1a;然后点击下一步 3.选择目标位置&#xff1a;点击浏览 4.选择D盘安装&…...

layui 表格点击编辑感觉很好用,实现方法如下

1. 在 HTML 页面中引入 layui 的相关资源文件&#xff1a;html <link rel"stylesheet" href"https://cdn.staticfile.org/layui/2.5.6/css/layui.css"> <script src"https://cdn.staticfile.org/layui/2.5.6/layui.js"></script&…...

大背景 网站/广州seo关键词优化费用

一个有效的数据降维的方法 t-SNE&#xff0c;类似PCA的主成分降维分析。 参考&#xff1a; t-分布邻域嵌入算法&#xff08;t-SNE algorithm&#xff09;简单理解 t-SNE初学 很好的教程&#xff1a;An illustrated introduction to the t-SNE algorithm 有点复杂额...

找人做彩票网站多少钱/my63777免费域名查询

我创建了一个Win32服务器 - 客户端应用程序&#xff0c;其中许多客户端连接到单个服务器&#xff0c;发送查询和 recv 响应 .它在许多安装中都能正常工作&#xff0c;但在其他一些安装中关闭了连接 . 客户端和服务器都报告远程主机已关闭连接 . 创建连接后的套接字操作顺序如下…...

为什么几年前做的网站视频看不了/seo搜索引擎入门教程

杂牌蓝牙在2003系统使用新驱动的破解方法&#xff01;--------------------------------------------------------------------------------现在最为流行的蓝牙驱动有三个&#xff1a;微星的bt49、任意品牌的1.4.1.6版和最新的1.4.2 Build 10版驱动。本文使用的1.4.1.6版和1.4.…...

wordpress获取点赞数/品牌策略包括哪些内容

t的内省机制剖析&#xff08;转&#xff09;所谓内省是指面向对象语言的一种在运行期间查询对象信息的能力&#xff0c; 比如如果该语句有运行期间检查对象型别的能力&#xff0c;那么我们称它是型别内省&#xff08;type intropection&#xff09;的&#xff0c;型别内省可以用…...

收银系统/广西seo优化

软件预期图像&#xff1a; 今日事logo如下&#xff1a; 软件进展如图&#xff1a; 遇到的问题&#xff1a; 在颜色设计上&#xff0c;不知道哪种更加美观&#xff0c;尝试中。 logo设计不是很完善。 目前正在边学边做阶段&#xff0c;遇到的问题较多&#xff0c;但通过查询资料…...

网站 png逐行交错/推广普通话宣传周

MySQL Community Downloads MySQL社区版压缩包下载地址 https://dev.mysql.com/downloads/mysql/ 解压到了C盘 没打算设置环境变量 右键点击开始 或 winx 以管理员身份打开 PowerShell 进入到安装目录下的 bin 目录 可以输入cd 后&#xff0c; 拖动 bin 文件夹到控制台&…...