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

SpringBoot数据响应、分层解耦、三层架构

响应数据

@ResponseBody

  • 类型:方法注解、类注解
  • 位置:Controller方法、类上
  • 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转换为json格式响应
  • 说明:@RestController = @Controller + @ResponseBody

统一响应结果

在这里插入图片描述

步骤 :

  • 获取员工数据,返回统一响应结果,在页面渲染展示

  • 在pom.xml文件中引入dom4j的依赖,用于解析xml文件
    在这里插入图片描述

  • 编写解析xml的工具类、对应的实体类、xml文件xxx.xml

  • 页面静态文件,放在resourcse下的static目录下

  • 编写Controller程序,处理请求,响应数据

注意

springboot项目的静态资源(html,css,js等前端资源)默认存放目录为:classpath:/static 、 classpath:/public 、classpath:/recourcse

分层解耦

三层架构 ----单一职责原则

在这里插入图片描述

  • controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据
  • service:业务逻辑层,处理具体的业务逻辑
  • dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查
    在这里插入图片描述

例如:

在这里插入图片描述

分层解耦—高内聚低耦合

  • 内聚:软件中各个功能模块内部的功能联系
  • 耦合:衡量软件中各个层/模块之间的依赖、关联程度
    在这里插入图片描述
  • 控制反转:Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想成为控制反转。
  • 依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时所依赖的资源,称之为依赖注入。
  • Bean对象:IOC容器中创建、管理的对象,称之为bean。

IOC&DI入门 ----步骤

  1. Service层及Dao层的实现类,交给IOC容器管理(控制反转)
    Dao层:
    在这里插入图片描述
    Service层:
    在这里插入图片描述

  2. 为Controller及Service注入运行时,依赖的对象(依赖注入)
    Controller层:
    在这里插入图片描述

    Service层:
    在这里插入图片描述

  3. 运行测试

@Component ----将当前类交给IOC容器管理,成为IOC容器中的bean

  • 将service层和dao层交给容器管理

@Autowired ---- 运行时,IOC容器会提供该类型的Bean对象,并赋值给该变量 - 依赖注入

  • controller层依赖service层
  • service层依赖dao层

IOC详解

Bean的声明
在这里插入图片描述

注解说明位置
@Component声明bean的基础注解不属于一下三类时,用此注解
@Controller@Component的衍生注解标注在控制器类上
@Service@Component的衍生注解标注在业务类上
@Respository@Component的衍生注解标注在数据访问类上(由于与mybatis整合,用的少)

@Controller:在实际开发中,标注了@RestController,可以不写,由于@RestController = @Controller + @ResponseBody

注意

  • 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写
  • 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller

bean的组件扫描

  • 前面声明bean的四大注解,想要生效,还需要被组件扫描注解@ComponentScan扫描
  • @ComponentScan注解虽然没有显示配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描范围是启动类所在包及其子包

小结

  • 声明bean的注解:@Component、@Controller、@Service、 @Respository
  • @SpringBootApplication具有包扫描作用,默认扫描当前包及其子包

DI详解

Bean注入:

  • @Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误
    在这里插入图片描述

  • 通过以下几种方案来解决:
    1、@Primary — 设置bean的优先级
    在这里插入图片描述

    2、@Qualifier —声明指明哪个bean(类型指定)
    在这里插入图片描述

    3、@Resource — 指定bean的名字(名字指定)
    在这里插入图片描述

依赖注入的注解:

在这里插入图片描述

@Resource与@Autowired区别:

在这里插入图片描述

相关文章:

SpringBoot数据响应、分层解耦、三层架构

响应数据 ResponseBody 类型:方法注解、类注解位置:Controller方法、类上作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转换为json格式响应说明:RestController Controller Respons…...

go测试库之apitest

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...

K8S删除资源后一直处于Terminating状态无法删除解决方法

原因 使用kubectl delete 删除某命名空间是一直处于Terminating状态无法删除,首先排查了该命名空间下是否还存在deployment pod等资源发现没有后,等了很久还是无法删除后发现是因为该名称空间的“finalizers”字段有值导致 Finalizer(终结器…...

jvm实践

说一下JVM中的分代回收 堆的区域划分 1.堆被分为了两份:新生代和老年代[1:2] 2.对于新生代,内部又被分为了三个区域。Eden区,幸存者区survivor(分成from和to)[8:1:1] 对象回收分代回收策略 1.新创建的对象,都会先分配到eden区 2.当伊园内存…...

redis-plus-plus访问REDIS集群

编程语言:C 开源库:redis-plus-plus 接口类:RedisCluster 初始化需要输入任意一个结点的IP和端口,如果设置了密码,还需要密码的明文并使用ConnectionOptions类。 初始化完成后可以直接进行读/写操作。 RedisClust…...

python把Word题库转成Excle题库

又到了一年一度的背题时刻,但是收到的题库是Word版的,页数特别多 话不多说,上代码,有图有真相,代码里面备注的很详细 # 导入所需库 import csv import os import refrom docx import Document from win32com import c…...

算法通关村第六关-白银挑战树

大家好我是苏麟 , 今天聊聊树 . 大纲 树的概念二叉树满二叉树完全二叉树 树的性质树的定义与存储方式树的遍历通过序列构造二叉树前中序列遍历 树的概念 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物&…...

【Java对象】一文读懂 Java 对象庐山真面目及指针压缩

文章目录 版本及工具介绍Java 对象结构对象头mark word 标记字mark word 标记字解析Lock Record class point 类元数据指针 实例数据对齐填充为什么需要对齐填充 常见 Java 数据类型对象分析ArrayListLongStringByteBoolean 其它指针压缩前置知识:32位操作系统为什么…...

leetcode做题笔记210. 课程表 II

现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,想要学习课程 0 ,你需要先完成课程 1…...

【深度学习 AIGC】stable diffusion webUI 使用过程,参数设置,教程,使用方法

文章目录 docker快速启动vae.ckpt或者.safetensorsCFG指数/CFG Scale面部修复/Restore facesRefinerTiled VAEClip Skipprompt提示词怎么写 docker快速启动 如果你想使用docker快速启动这个项目,你可以按下面这么操作(显卡支持CUDA11.8)。如…...

论文阅读 - Detecting Social Bot on the Fly using Contrastive Learning

目录 摘要: 引言 3 问题定义 4 CBD 4.1 框架概述 4.2 Model Learning 4.2.1 通过 GCL 进行模型预训练 4.2.2 通过一致性损失进行模型微调 4.3 在线检测 5 实验 5.1 实验设置 5.2 性能比较 5.5 少量检测研究 6 结论 https://dl.acm.org/doi/pdf/10.1145/358…...

PaddleMIX学习笔记(1)

写在前面 之前对HyperLedger的阅读没有完全结束,和很多朋友一样,同时也因为工作的需要,最近开始转向LLM方向。 国内在大模型方面生态做的最好的,目前还是百度的PaddlePaddle,所以自己也就先从PP开始看起了。 众所周知…...

【网络协议】聊聊HTTPS协议

前面的文章,我们描述了网络是怎样进行传输数据包的,但是网络是不安全的,对于这种流量门户网站其实还好,对于支付类场景其实容易将数据泄漏,所以安全的方式是通过加密,加密方式主要是对称加密和非对称加密。…...

2023.11.2事件纪念

然而造化又常常为庸人设计,以时间的流逝,来洗涤旧迹,仅以留下淡红的血色和微漠的悲哀。 回顾这次事件,最深的感触就是什么是团队的力量! 当我们看到希望快要成功的时候,大家洋溢出兴奋开心的表情,一起的欢声笑语;但看…...

Scala和Play WS库编写的爬虫程序

使用Scala和Play WS库编写的爬虫程序,该程序将爬取网页内容: import play.api.libs.ws._ import scala.concurrent.ExecutionContext.Implicits.global ​ object BaiduCrawler {def main(args: Array[String]): Unit {val url ""val proxy…...

佳易王配件进出库开单打印进销存管理系统软件下载

用版配件进出库开单打印系统,可以有效的管理:供货商信息,客户信息,进货入库打印,销售出库打印,进货明细或汇总统计查询,销售出库明细或汇总统计查询,库存查询,客户往来账…...

【深度学习基础】专业术语汇总(欠拟合和过拟合、泛化能力与迁移学习、调参和超参数、训练集、测试集和验证集)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

【C语言:函数栈帧的创建与销毁】

文章目录 前言一、前期准备1.寄存器2.汇编指令3.测试代码 二、解开函数栈帧的神秘面纱1.栈帧大体轮廓2.main函数栈帧的创建3.main函数内执行有效代码4.烫烫烫5.函数参数的传递6.add函数栈帧的创建7.add函数内执行有效代码8.add是如何获得参数的9. add函数栈帧的销毁10.main函数…...

怎么在C++中实现云端存储变量

随着云计算技术的快速发展,现在我们可以将数据存储在云端,以便于在不同设备和地点访问。在C中,我们也可以通过一些方法来实现这个功能。本文将详细介绍如何在C中实现云端存储变量。 首先,我们需要理解,C本身并没有直接…...

短视频矩阵营销系统工具如何助力商家企业获客?

1.批量剪辑技术研发 做的数学建模算法,数学阶乘的组合乘组形式,采用两套查重机制,一套针对素材进行查重抽帧素材,一套针对成片进行抽帧素材打分制度查重,自动滤重计入打分。 2.账号矩阵分发开发 多平台,…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

【AI学习】三、AI算法中的向量

在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...