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下一节;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件设计师】计算机网络考点整理

以下是软件设计师考试中 ​​计算机网络​​ 的核心考点总结,帮助您高效备考: ​​一、网络体系结构与协议​​ ​​OSI七层模型 & TCP/IP四层模型​​ 各层功能(物理层-数据链路层-网络层-传输层-会话层-表示层-应用层)对应协…

基于深度学习的工件检测系统设计与实现

在工业自动化领域,工件检测一直是提高生产效率和产品质量的关键环节。传统的人工检测方法不仅效率低下,而且容易受到主观因素的影响,导致误判率较高。随着深度学习技术的飞速发展,基于图像识别的自动检测系统逐渐成为研究热点。今…

IIS入门指南:原理、部署与实战

引言:Web服务的基石 在Windows Server机房中,超过35%的企业级网站运行在IIS(Internet Information Services)之上。作为微软生态的核心Web服务器,IIS不仅支撑着ASP.NET应用的运行,更是Windows Server系统管…

Linux周测(一)

提示:学习一周了,来检验一下成果吧 文章目录 技术部分,满分100分。 1.如何在Linux系统中查看当前登录的所有用户信息? w或者who或者last 2.请写出在Linux系统中创建一个新用户“testuser”的命令,并指定其家目录为“/h…

构建下一代AI智能体:基于Spring AI的多轮对话应用

构建下一代AI智能体:基于Spring AI的多轮对话应用 前言 大模型时代,AI应用开发已不再是遥不可及的技术。通过合理设计的Prompt工程和对话架构,开发者可以快速构建具备持续记忆能力的AI智能体。本文将重点介绍如何基于Spring AI框架打造可持…

查看mysql配置文件my.cnf的位置

3.删除mysql相关文件 想要完全卸载mysql,不仅要卸载应用,配置文件及相关文件也需要一一清除,还原环境配置,减少一些麻烦。 sudo rm -rf /usr/local/mysql sudo rm -rf /etc/my.cnf sudo rm -rf /var/db/mysql sudo rm -rf /var/…

【从基础到模型网络】深度学习-语义分割-基础

语义分割在深度学习与人工智能领域占据重要地位。它是计算机视觉的核心任务之一,能够将图像像素级地划分为不同语义类别,为理解图像内容提供关键支持。在自动驾驶中,可精准识别道路、车辆、行人等元素,保障行车安全;在…

C++:array容器

array容器是序列容器&#xff0c;它的特点是&#xff1a;静态&#xff0c;固定数目。可以看作更安全的数组。 它还有一些成员函数&#xff0c;如begin&#xff08;&#xff09;&#xff1a;返回指向容器中第一个元素的随机访问迭代器。 #include<iostream>//数组容器 #…

2025年度消费新潜力白皮书470+份汇总解读|附PDF下载

原文链接&#xff1a;https://tecdat.cn/?p42178 过去一年&#xff0c;消费市场在政策驱动与技术迭代中呈现结构性变革。社零总额达487,895亿元&#xff0c;实物商品网零额占比27%&#xff0c;线上渠道成为增长引擎。本报告从食品饮料、美妆护肤、家电数码、服饰户外四大核心领…

[Web服务器对决] Nginx vs. Apache vs. LiteSpeed:2025年性能、功能与适用场景深度对比

更多服务器知识&#xff0c;尽在hostol.com 当你准备为你的网站或应用程序选择一款 Web 服务器软件时&#xff0c;就像是为你的“超级跑车”选择一款合适的“引擎”——它将直接决定你的“座驾”能跑多快、多稳、以及能适应什么样的“路况”&#xff08;工作负载&#xff09;。…

一款适配国内的视频软件,畅享大屏与局域网播放

软件介绍 今天要给大家安利一款超强视频播放软件——MXPlayer。它的解码实力堪称一绝&#xff0c;市面上不管是常见的 MP4、MKV 格式&#xff0c;还是对播放设备要求极高的超高清 4K、HDR 视频&#xff0c;甚至那些鲜为人知的冷门格式&#xff0c;它统统都能流畅播放&#xff…

[CSS3]百分比布局

移动端特点 PC和手机 PC端网页和移动端网页的有什么不同? PC屏幕大&#xff0c;网页固定版心手机屏幕小&#xff0c;网页宽度多数为100% 谷歌模拟器 使用谷歌模拟器可以在电脑里面调试移动端的网页 屏幕尺寸 了解屏幕尺寸概念 屏幕尺寸: 指的是屏幕对角线的长度&#xff…

【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)

在自动化办公或业务流程管理中,明道云提供了强大的 HTTP 请求节点,可以直接调用第三方 API,包括我们常见的 Flask 服务端接口。本文将详细介绍如何使用明道云通过 POST 方法调用 Flask 视图函数并传参,包括配置要点与 Python 后端的参数接收方法。 一、场景介绍 我们希望…

在 Azure OpenAI 上使用 Elastic 优化支出和内容审核

作者&#xff1a;来自 Elastic Muthukumar Paramasivam&#xff0c;Bahubali Shetti 及 Daniela Tzvetkova 我们为 Azure OpenAI 正式发布包添加了更多功能&#xff0c;现在提供内容过滤监控和计费见解的增强&#xff01; 在之前的博客中&#xff0c;我们展示了如何使用 Elasti…

iOS解码实现

import Foundation import VideoToolboxclass KFVideoDecoderInputPacket {var sampleBuffer: CMSampleBuffer? }class KFVideoDecoder {// MARK: - 常量private let kDecoderRetrySessionMaxCount 5private let kDecoderDecodeFrameFailedMaxCount 20// MARK: - 回调var pi…

Redis应用--缓存

目录 一、什么是缓存 1.1 二八定律 二、使用Redis作为缓存 三、缓存的更新策略 3.1 定期更新 3.2 实时生成 四、缓存预热、缓存穿透、缓存雪崩和缓存击穿 4.1 缓存预热 4.2 缓存穿透 4.3 缓存雪崩 4.4 缓存击穿 一、什么是缓存 缓存(cache)是计算机的一个经典的概念…

Unity 喷烟喷气特效:喷快消失慢

快速喷气缓慢消失同时播放3*3序列帧动画。常用在火车烟囱特效、气体释放、摔倒、等效果中&#xff0c;可变种应用场景较多。 下列为Particle System参数&#xff1a; Color over Lifetime参数&#xff1a; UnityEditor.GradientWrapperJSON:{"gradient":{"ser…

关于收集 Android Telephony 网络信息的设计思考2

需求: 目标1: Android Telephony data(数据模块)侧收集多源(ServiceStateTracker/ImsService/其他)网络状态信息。目标2: 收集的数据需统一上报/存储到外部App的Provider。字段分散,不方便只在ServiceStateTracker中收集和插入。多触发点/多场景,需要统一插入。一、架构…

Elasticsearch 深入分析三种分页查询【Elasticsearch 深度分页】

前言&#xff1a; 在前面的 Elasticsearch 系列文章中&#xff0c;分享了 Elasticsearch 的各种查询&#xff0c;分页查询也分享过&#xff0c;本篇将再次对 Elasticsearch 分页查询进行专题分析&#xff0c;“深度分页” 这个名词对于我们来说是一个非常常见的业务场景&#…

CodeBuddy(腾讯云代码助手)最新功能——智能体 Craft 体验

文章目录 &#x1f4cb; 前言&#x1f3af; 关于智能体 Craft&#x1f3af; 智能体 Craft 体验&#x1f9e9; 安装方法&#x1f9e9; 如何使用&#x1f9e9; Craft 初体验&#x1f9e9; Craft 生成代码效果体验 &#x1f4dd;最后 &#x1f4cb; 前言 CodeBuddy&#xff08;腾讯…