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

java day14

接昨天,响应

响应

就是我们在处理请求的时候,里面的return
在这里插入图片描述
其实方法里面写的return的返回平常的什么字符串啊什么等等;这些东西都是直接返回;如果是一个对象的话,我们会按json的格式返回;
这些都依赖于一个注解叫@responsebody,这个东西会帮我们返回,但是他存在于@requestcontroller里面
就是相当于你加这两个注解,等于这一个注解
在这里插入图片描述
底下的两个等于上面的两个;

因为各种类型返回非常麻烦,给前端来了个集合
在这里插入图片描述
直接用这个类,前端拿到这个类就能明白了;
在这里插入图片描述
用result类型,直接在返回的时候标注好result类型;result可以点访问到一个方法;叫success这个是内个标准格式;
是文本你就直接吧东西放到最后的括号里面;是对象或者数组啥的你就直接把名字放进去;
先这么理解吧,pojo包下就放请求要用到的类,还有封装好的返回的格式;

小训练,统一响应格式

在这里插入图片描述
按老师的4步来;引入依赖解析xml文件,然后引入工具类,放到工具类包下;引入静态页面文件;编写controller程序;处理请求和响应数据;

把前端的东西按照资源里面咱们也引入进来;然后看一下前端在定义的时候mount挂载的时候,他挂载的请求路径是什么,咱们去写处理请求的时候就更好写一点;然后记得写的时候返回的东西是统一的哈;统一的;都是result
要熟练;
result.scuess() scuess里面放返回的数据;记得记得记得是result类型

这个训练就是,导入好老师的资源放入对应的包下;然后进行处理文件,写好处理的代码;然后编写请求;处理请求的逻辑,以及返回统一的格式的result的一种练习;主要是加深对请求,响应,统一格式的各种理解;

废话一句:感觉学的还挺快乐,每天跟扫盲似的;笑死;没有志同道合的全栈妹子;那就自己学0.0

好了不多说,因为上面的这种请求类,要写很多的代码加解析有很多的操作,非常麻烦非常
所以;又又又推出了一种新模式;
叫分层解耦

跟着老师开始练习
1.导入老师写好的包
2.解析文件语句;吧文件存到一个集合里面;
3.遍历集合,对里面的数据进行处理;
4.输出集合。调用统一的返回类型result,这个是我们自己定义的返回格式;也是老师写好的给的包,一开始还遇到了一些小问题;我调用了java里面的自己的接口而不是我们定义好的包;这个导入这个地方一定要看清楚;
5.设置好断点一步步看;看老师输出了什么;用到了什么;把什么东西传递过去了;等等;
6.然后我们看到了:他的存储路径啊;给前端渲染出来的图表
7.现在有些疑问,
1.这个xml文件是什么,为什么我们还得专门写道请求里面去解析?
2.我们用一个文件的字符型变量去接收到了什么?这句话我不太明白;比如用这个类的对象去.访问到很多方法,看起来也是emp.xml里面的东西;
3.封装成一个集合之后呢?我们开始处理数据遍历然后更改,这个foreach强循环虽然以前也见过,但是;还是对他的格式蛮陌生的,需要多加练习;
8.然后我丢给ai了
1.xml 文件:XML 是可扩展标记语言(eXtensible Markup Language)的缩写 。它被设计用来传输和存储数据,具有自描述性、结构化的特点。比如一个员工信息的 xml 文件可能像这样:基本上也就是我想的,就是类似数据库一样的数据文件;原始数据;至于解析,无非就是获取到这个文件里面的数据,然后才能操作;
2.,这里的file变量接收的是emp.xml文件在服务器文件系统中的路径字符串。也就是这个文件的存储地址;
在这里插入图片描述
遇到的问题
原来的获取文件的解析方式不对,路径不对
改成这个存储,用这个句子是对的;就可以用postman里面测试得到了;
String filePath = Paths.get(“src”, “main”, “resources”, “emp.xml”).toString();

分层解耦概念

也就是我们常听见的三层架构
就还记得上节课,我们需要导入文件,然后解析文件,还要引入别的类,放在我们自己的包下,而且有数据我们想进行转换,我们还得自己手动去写这个代码;

在这里插入图片描述
这种分层解耦的方式;就让咱们controller处理请求类的代码大大下降;非常的方便;

在这里插入图片描述
在这里插入图片描述
耦合
就是你改这一层的代码;也会变动另一层;两次的联系过于紧密;一动就动全身;所以我们要解耦合;

小训练分层

首先分析我们原来请求里面的代码:
1.先解析xml文件;然后获取数据;封装到集合里面 这里我们称之为数据访问层 dao 而这个数据访问层也叫做持久层;一般在这会先获取数据然后对数据操作增删改查;
2.这里是对数据的操作,数据处理,把我们要的写好 称之为逻辑处理 service 服务层
3.最后的一个return这个是接收请求,响应数据的代码; controller 控制层
我们尽量分成这三层

我们现在开始来尝试拆分;
首先把我们解析xml文件的这串玩意给他扔进dao层去,dao 和 service两里面都是写接口哈咱们就是再se里面讲过,灵活的操作最好是去面向接口,重写方法的,然后再附着一个impl的实现接口的类;
欸,首先
1.解析和获取数据对数据增删改查的这个dao层,我们获取的数据类型有很多很多种,比如;别人给一个接口,这接口里面访问进去有数据;欸;也有可能是数据库的数据;也有可能是初始数据比如咱们手上的xml文件;
来分析,咱们手里面这个数据是列表的;所以我们需要再dao创建一个接口,里面写一个返回是列表类型的方法吧;然后去实现,在dao包底下建立一个Impl包,里面放实现类;然后里面去implents一下这个接口;然后咱们重写一下他的方法;里面就放咱们分析的代码就行;
2.我们去服务层,写对数据处理的代码,先写个接口,方便大家改,然后写个实现类去实现,重写一下方法;就是咱们直接处理数据的方法,但是!你得先有人家持久层分析好的数据呀,你需要持久层创建一个对象;然后访问到他的方法,这个值你得用一个列表型的变量去接收吧;然后才能正常工作,
3.最后控制层同理,前面的代码都拆完了, 你这里就返回就行了;当然也需要先获取到服务层修改完的数据,给个接口类型的变量用实现类分配空间;然后访问方法,用一个列表类型的变量去接收吗;
至此就拆分完毕了;再运行一下,跟postman说一声,然后成功返回;
注意
在这里插入图片描述

这里不是接口创建对象,是接口类型命名一个变量哈;后面可以跟不同类的实现;因为很多类都可以实现这个接口
每次判断的时候直接看new 的后面是哪个类就行;

还有一个疑惑,就是老师输出的是图片列表啥的,我就不是,我就是一堆json,一堆js 的选项data,一个对象,why,是没图片还是没连着前端,好奇怪;后续找人解答一下;
不用后续了;人家浏览器当然访问的是前端页面,我路径输入错误了,出现这个页面就基本完成了拆分,就是客户在服务端访问到前端的html页面,然后前端要数据了;写个接口给后端,说要什么,就是axious的请求,然后发送给后端,说要什么,比如要一个数据库里面的东西吧,那我们后端就要把数据库的信息存入到dao访问持久层吧,然后基本的增删改查加处理完毕之后我们要给到服务层吧;然后我们在服务层完成基本的数据处理之后,我们就应该给控制层;然后我们去控制层;返回响应数据之后前端就拿到了,然后形成闭环;
通透了;泪目;泪目啊;泪目;呜呜呜呜呜呜呜;
在这里插入图片描述

收拾好心情继续学;感觉每天在这自言自语的会不会早晚抑郁?
不想了;

分层好处是什么?
第一个复杂度降低;
第二个特别好维护;
你写的接口,别人可以重写你的业务逻辑代码;可以集思广益,你改也是直接重写就行;

内聚耦合

内聚
就是比如员工类里面我们只写员工类的东西,别的不写;
这就是内聚高,不杂;

耦合
就是各个模块依赖性强,比如你改了dao层的代码你service的代码还得跟着动,这就牵一发动全身了;
这就是高耦合;依赖太强;分不开;不独立只要你这个类这个模块总是要依赖别的类,那就是耦合,或者是层与层的依赖;

一个场景;
比如数据拿来了再dao层,咱们去要进行修改吗,第一个我不是修改的1等于男,2等于女吗,再服务层;
但是我想再写一种,我给写了个1等于女,2等于男;那就是服务层的第二个类吗还是实现的那个接口;
然后咱们去控制层返回的时候,创建对象就得切换个类分配空间拉;就不能创建原来类的对象了;
在这里插入图片描述
这就是控制层和服务层耦合
然后我们现在来解耦合
在这里插入图片描述

老师讲到一个容器的概念;就是把两个类的对象都给他放在一个容器里面;咱们集合管理哈;
然后你控制层要用那个处理数据的类你就选哪个类的对象就好拉;然后这边命名变量接收一下;就完毕了;
1.如何把这个类的对象放在这个容器里面?
2.如何把这个类的对象赋值给控制层?
在这里插入图片描述

提到两个概念

解耦方法

控制反转和依赖注入
想把两服务层的对象给一个容器管理存储一下要用到控制反转的概念;
在这里插入图片描述
控制反转:本来对象创建是类内部,或者在别的类里边,去分配吗;
现在都给他扔容器里边去 这个思想称ioc

依赖注入呢:比如我控制层要用到这个变量,这个变量接收啥都行呗,接收你容器给我的对象;我们把这个容器给变量赋值的过程叫做依赖注入;也叫di

那很好理解,咱们给出去的对象就叫bean;

Ok思路理解了,上代码;加深一下概念

1.咱们肯定得先把关联代码删了,比如new对象吧
2.咱们要先声明我们要把这个类的对象给一个容器管理拉,就要上个注解@Component ,就拿服务层和控制层举例,这个你要写在服务层的实现类里边;
3.你容器给完了你要赋值吧;依赖注入di的操作那就是再加个注解@Autowired这个玩意加在你赋值的变量上面,表示这个变量是要被容器里面的对象赋值的;也就是控制层的代码里面的那个变量;这只是拿训练举例,理解了是哪里用到写哪里
在这里插入图片描述
4.比如咱们这个小训练;你控制层要用服务层的东西了;你就去把这两个注解加上;你服务层要用持久层的东西了,你还得加上;然后运行不报错就解耦成功了;这样只需要在对应类里面改代码就好啦;非常方便了也是;
在这里插入图片描述
还有个点。这个玩意不适用局部变量;你得给他放到方法外面去,变成全局的才行;
现在比如我们服务层两个处理数据的方法吧;A类的方法,类头上你要加个@Component;好,现在意思就是这个类的对象在ioc容器里面了;现在你去依赖注入也就是Di操作;你返回控制类里边, 去你要被赋值的内个变量哪里,他的头上写个 @Autowired;表示这个资源变量是随时要被ioc容器里面的东西赋值的!就o了;
所以以后写代码的步骤我梳理一下;先传数据给idea,建立实体类放entity里面,做好映射哈,
然后创建dao层里面去解析数据库的数据,做点最简单的处理;crud吗;记得写接口和实现类;
然后给服务层看哪些数据要改;给出多种方案,可以是一个接口多个类吗;先写;然后调用一下dao的数据;这时候就可以进行解耦合了;我们先写好方法,看要用到哪些资源;然后根据方法命名好是哪个接口类型的变量;然后给这个变量上di操作;挂个 @Autowired,表示随时要容器给值;
欸,其实挂了这个容器,用到别的层的也方便;也不是非得dao的。
继续,然后返回dao给dao的类上挂@Component,标明这个类的对象被弄到容器里面拉;就欧克了。
有个问题,你在哪标注,就是哪个类给bean;
不是,那你标多个呢
在这里插入图片描述
怎么办,好像看见要添加限定符了;
好吧听了老师讲解,直接简单粗暴的咱们用A就给A加@Component;用B就给B加@Component,哪个不用扔掉哪个就行了;按照我那么想,就还是得动代码…

继续;
因为全是这个注解比较乱吗,你不知道是那一层的bean
所以给了如下注解选择,更人性化
在这里插入图片描述

第一个就是你开发的时候有个类都不能归到这三层, 你就给这个注解则可
这三个注解就是@Component的衍生版;
但是控制层的也不用加,因为写请求的时候内个@RestController就是交给ioc容器管理和处理原先请求格式的一个集合注解,是被包含的;
所以一般就写在内个服务层或者dao层就行了;
在这里插入图片描述

这个查找的过程就感觉是,左边是类,右边是他的对象;想改对象名字也就是Bean的名字,直接给里面括号引号改就完了;一般都默认值

特殊情况

组件扫描不上
在这里插入图片描述

假设你移动了,这个组件到这个包外,因为启动类是在包内的; 启动类有个注解这个大注解里面包含了一个组件扫描的小注解,他范围就是当前包和子包;放外面就扫不上了没识别;
解决方案
在这里插入图片描述

把这个注解提出来,指定要扫描哪个包,指定上就完了;
按规范写就不会有问题;

在这里插入图片描述

好吧就是我刚刚遇到的重复bean的问题,加个限定符就行,还是直接注释吧;
ok下一节;

相关文章:

java day14

接昨天,响应 响应 就是我们在处理请求的时候,里面的return 其实方法里面写的return的返回平常的什么字符串啊什么等等;这些东西都是直接返回;如果是一个对象的话,我们会按json的格式返回; 这些都依赖于一…...

Tailwind css实战,基于Kooboo构建AI对话框页面(一)

在当今数字化时代,AI 助手已成为网站和应用不可或缺的一部分。本文将带你一步步使用 Tailwind CSS 和 Kooboo 构建一个现代化的 AI 对话界面框。 一、选择 Kooboo平台 的核心优势 智能提示:在输入 class 属性时,会自动触发 Tailwind CSS 规则…...

重塑数学边界:人工智能如何引领数学研究的新纪元

目录 一、人工智能如何重新定义数学研究的边界 (一)数学与AI的关系:从基础理论到创新思维的回馈 (二)AI的创造力:突破传统推理的局限 (三)AI对数学研究的潜在贡献:创…...

docker部署并测试翻译模型-CSANMT连续语义增强机器翻译

1.模型选择CSANMT-Translation模型: 2.修改docker-compose.yml文件,重新定义模型缓存路径和存储路径 其中MODELSCOPE_CACHE指定了模型的下载路径。 3.运行docker compose up -d --build,提示出现报错:Error response from daemon…...

蓝桥杯2025.5.23每日一题-儿童数

儿童数 若一个正整数 n n n 满足 n 61 n^{61} n61 整除 2024 ! 2024! 2024!,即 2024 ! 2024! 2024! 除以 n 61 n^{61} n61 的余数为 0 0 0,则称 n n n 为儿童数。 现在,请你计算在区间 [ 1 , ∞ ) [1, \infty) [1,∞) 内一共有多少…...

Spring Boot项目配置核心 - pom.xml的依赖管理与构建优化

基础架构 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVe…...

告别手抖困扰:全方位健康护理指南

手抖&#xff0c;医学上称为震颤&#xff0c;是常见的身体症状&#xff0c;可能由多种原因引发&#xff0c;了解其成因并采取科学护理措施&#xff0c;对改善症状、维护健康至关重要。 生理性手抖往往因情绪激动、过度劳累、大量饮用咖啡或酒精等引起&#xff0c;这种手抖通常较…...

图解深度学习 - 特征工程(DL和ML的核心差异)

前言 深度学习通过自动化特征提取&#xff0c;简化了机器学习工作流程&#xff0c;它让解决问题变得更加简单。因为深度学习将特征工程完全自动化&#xff0c;而特征工程曾经是机器学习工作流程中最关键的一步。 一、机器学习特征工程 机器学习为什么需要特征工程&#xff08…...

《短线操盘跟庄关键技术》速读笔记

文章目录 书籍信息概览基础技术及实战运用基本趋势及操盘策略陷阱的识别和规避短线实战选股实战买点分析实战卖点分析 书籍信息 书名&#xff1a;《短线操盘跟庄关键技术》 作者&#xff1a;明发 概览 基础技术及实战运用 技术分析的原理及特点&#xff1a;以市场行为&#…...

Datacom-hcia~Datacom-hcie学习笔记索引

hcia VLAN工作原理实验案例(超详细)https://blog.csdn.net/Fanmeang/article/details/145855768?spm1001.2014.3001.5502 交换机工作原理实验案例https://blog.csdn.net/Fanmeang/article/details/145802382?spm1001.2014.3001.5502 ARP理论实验案例&#xff08;超详细&am…...

Oracle 中 SHRINK 与 MOVE 操作的比较

Oracle 中 SHRINK 与 MOVE 操作的比较 在 Oracle 数据库中&#xff0c;SHRINK 和 MOVE 都是用于重组表和索引以减少空间碎片的重要操作&#xff0c;但它们在实现方式和适用场景上有显著区别。 SHRINK 操作 基本语法 ALTER TABLE table_name SHRINK SPACE [COMPACT] [CASCAD…...

受不了github的网络限制了,我开源了一个图床工具 gitee-spring-boot-starter

嗨嗨嗨~ 我老马又又来了&#xff01;&#xff01;&#xff01;上次写了一篇我开源了一款阿里云OSS的spring-boot-starter&#xff0c;然后买的资源包到期了&#xff0c;后面又想白&#xff08;开&#xff09;嫖&#xff08;源&#xff09;的路子&#xff0c;首先想到了使用gith…...

【Python 基础与实战】从基础语法到项目应用的全流程解析

&#xff08;1&#xff09;列表和元组的区别是什么?如何从列表创建元组?如何从元组创建列表? 列表和元组的区别&#xff1a; 可变性&#xff1a;列表是可变的&#xff0c;即可以对列表进行元素的增、删、改操作。例如&#xff0c;可以使用append()方法添加元素&#xff0c;r…...

2025年医美行业报告60+份汇总解读 | 附 PDF 下载

原文链接&#xff1a;https://tecdat.cn/?p42122 医美行业在消费升级与技术迭代的双重驱动下&#xff0c;已从边缘市场逐步走向主流。数据显示&#xff0c;2024 年中国医美市场规模突破 3000 亿元&#xff0c;年复合增长率达 15%&#xff0c;但行业仍面临正品率不足、区域发展…...

API自动化与持续集成核心实战知识点!

想象一下&#xff0c;你开发的API像一辆跑车&#xff0c;性能强劲&#xff0c;但你如何确保它每次启动都完美无缺&#xff1f;或者你的代码像一道复杂的菜肴&#xff0c;如何保证每次更新都不破坏原有味道&#xff1f;答案就是API自动化测试与持续集成&#xff01;SuperTest让你…...

基于SpringBoot+Vue的社区医院信息平台设计与实现

项目背景与概述 随着医疗健康信息化的发展&#xff0c;社区医院的管理逐渐由传统的手工模式转向信息化管理。为了提高医院的管理效率、减少人工操作、提升服务质量&#xff0c;开发一个高效且实用的社区医院信息平台显得尤为重要。本系统基于Spring Boot框架与MySQL数据库设计…...

C++ 中的暴力破解算法

一、暴力破解算法原理​ 暴力破解算法&#xff0c;顾名思义&#xff0c;就是通过穷举所有可能的解&#xff0c;逐一验证&#xff0c;直到找到满足条件的解。它不依赖复杂的逻辑推导或数学优化&#xff0c;而是依靠计算机强大的计算能力&#xff0c;将所有可能的情况都尝试一遍…...

前端[插件化]设计思想_Vue、React、Webpack、Vite、Element Plus、Ant Design

前端插件化设计思想旨在提升应用的可扩展性、可维护性和模块化程度。这种思想不仅体现在框架&#xff08;如 Vue、React&#xff09;中&#xff0c;也广泛应用于构建工具&#xff08;如 Webpack、Vite&#xff09;以及 UI 库&#xff08;如 Element Plus、Ant Design&#xff0…...

率先实现混合搜索:使用 Elasticsearch 和 Semantic Kernel

作者&#xff1a;来自 Elastic Enrico Zimuel 及 Florian Bernd 混合搜索功能现在已在 .NET Elasticsearch Semantic Kernel 连接器中提供。阅读这篇博客文章了解如何开始使用。 Elasticsearch 已原生集成业内领先的生成式 AI 工具和服务提供商。欢迎观看我们的网络研讨会&…...

uni-app(4):js语法、css语法

1 js语法 uni-app的js API由标准ECMAScript的js API 和 uni 扩展 API 这两部分组成。标准ECMAScript的js仅是最基础的js。浏览器基于它扩展了window、document、navigator等对象。小程序也基于标准js扩展了各种wx.xx、my.xx、swan.xx的API。node也扩展了fs等模块。uni-app基于E…...

基于SpringBoot的网上租赁系统设计与实现

项目简介 本项目是基于 Spring Boot Vue 技术栈开发的 网上租赁系统。该系统通过前后端分离的架构&#xff0c;提供用户和管理员两种角色的操作权限&#xff0c;方便用户进行商品租赁、订单管理、信息查询等操作&#xff0c;同时也为管理员提供了商品管理、用户管理、订单管理…...

kafka吞吐量提升总结

前言 原本自以为阅读了很久kafka的源码&#xff0c;对于kafka的了解已经深入到一定程度了&#xff0c;后面在某大厂的面试中&#xff0c;面试官询问我&#xff0c;如果需要提升kafka的性能&#xff0c;应该怎么做&#xff0c;我发现我能答上来的点非常的少&#xff0c;也暴露了…...

AI浪潮下,第五消费时代的商业进化密码

解锁 AI 与第五消费时代 在时代的长河中,消费浪潮的更迭深刻地影响着商业的格局。当下,我们正处于第五消费时代,这个时代有着鲜明的特征,如老龄化、单身化趋势日益显著,社会逐渐步入低欲望、个性化与共享化并行的阶段 。随着人工智能技术的飞速发展,它在商业领域的渗透也…...

Vue组件开发深度指南:构建可复用与可维护的UI

Vue组件开发深度指南&#xff1a;构建可复用与可维护的UI 在现代前端开发中&#xff0c;组件化是构建复杂用户界面的核心思想。Vue.js 以其简洁、高效的组件系统&#xff0c;成为了众多开发者的首选框架之一。理解并熟练运用Vue组件开发&#xff0c;能够显著提升开发效率、代码…...

青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象

青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象 一、面向对象的编程特性&#xff08;一&#xff09;封装&#xff08;Encapsulation&#xff09;&#xff08;二&#xff09;多态&#xff08;Polymorphism&#xff09;&#xff08;三&#xff09;继承&#xff08;Inhe…...

Jouier 普及组十连测 R4

反思 本次比赛到时没有什么细节错误&#xff0c;不过代码思路不好所以分数也不是很高。 T1 代码思路 看题意&#xff0c;发现数据范围不大&#xff0c;直接动用码力暴力即可。 代码 #include<bits/stdc.h> using namespace std;vector<vector<int> > a(110…...

bi平台是什么意思?bi平台具体有什么作用?

目录 一、BI平台是什么意思 1. 具体内涵 2. 主要构成 二、BI 平台具体有什么作用 1. 提供全面的数据洞察 2. 支持快速决策 3. 优化业务流程 4. 提升企业协作 三、BI 平台的应用场景 1. 金融行业 2. 零售行业 3. 制造行业 4. 医疗行业 总结 “每天在海量数据中反复…...

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

介绍 Halcon 的算子&#xff08;operators&#xff09;按照功能被系统性地划分为多个类别&#xff0c;官方文档中目前&#xff08;Halcon 22.11 版本&#xff09;共有 19 个主分类&#xff0c;每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的…...

Redis从入门到实战 - 原理篇

一、数据结构 1. 动态字符串SDS 我们都知道Redis中保存的key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串&#xff0c;因为C语言字符串存在很多问题&#xff1a; 获取字符串长…...

26考研|高等代数:线性变换

前言 线性变换这一章节是考频较高的一部分&#xff0c;此部分涉及考点较多&#xff0c;涉及的考题也较多&#xff0c;学习线性变换时&#xff0c;应该注意搭建线性变换与矩阵之间的联系&#xff0c;掌握如何利用矩阵表示一个线性变换结构&#xff0c;同时介绍了最简单的线性变…...