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

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恶补day2] 49. 字母异位词分组
  • 深入理解 Pre-LayerNorm :让 Transformer 训练更稳
  • Java虚拟机栈
  • leetcode hot100刷题日记——7.最大子数组和
  • 计算机视觉与深度学习 | Python实现CEEMDAN-ISOS-VMD-GRU-ARIMA时间序列预测(完整源码和数据)
  • 目标检测基础知识
  • 目标检测135个前沿算法模型汇总(附源码)!
  • vue项目启动报错(node版本与Webpack)
  • vue-cli 构建打包优化(JeecgBoot-Vue2 配置优化篇)
  • MEMO数据DID与ZK技术:赋能RWA代币化与可信流通的新基石
  • C++ 01.vscode配置c++开发环境
  • C++语法理解记录
  • 安卓开发用到的设计模式(1)创建型模式
  • 缺乏经验的 PCB 过孔建模方法
  • NIFI的处理器:JSLTTransformJSON 2.4.0
  • 基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)
  • 【神经网络与深度学习】流模型的通俗易懂的原理
  • Simon J.D. Prince《Understanding Deep Learning》
  • vscode连接WSL卡住
  • jvm调优以及常见jvm问题解决等
  • wordpress图片500/seo自学网视频教程
  • wordpress滚动图片代码/杭州优化商务服务公司
  • 丹灶做网站/seopc流量排名官网