分层解耦相关知识点

news2024/11/16 16:01:50

这里写目录标题

  • 三层架构
    • 简介
    • 具体案例
      • 原始代码
      • DAO层代码
      • service层
      • controller层
      • 总结
  • 分层解耦
    • 思想
    • IOC&DI 入门
      • 简介
      • 控制反转
      • 依赖注入
    • IOC详解
      • 详细种类
    • DI详解

三层架构

简介

在这里插入图片描述

具体案例

原始代码

在这里插入图片描述

DAO层代码

分别是一个接口实现类以及一个接口,用接口是为了提高程序的灵活性
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

service层

先是一个接口,之后是接口的实现类(不完整),最后补全了实现类里的一些部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里service层是逻辑分析层,并没有数据,需要从Dao层获取数据,所以要面向Dao层的接口创建一个对象,采用多态的方法,左边是接口对象,右边new一个实例化子类,之后利用接口对象去调用功能,这里就用到了刚刚在Dao层写的方法(返回值为一个包含数据的list列表)

controller层

在这里插入图片描述
这里需要调用经过逻辑处理之后的数据,所以要面向service层接口创建一个接口对象,new一个实例化子类,之后利用该对象去调用方法,得到返回值,最后响应给前端

总结

在这里插入图片描述

分层解耦

思想

在这里插入图片描述
在这里插入图片描述
之前的分层 层与层之间过于耦合,所以要想办法进行解耦

在这里插入图片描述
将接口的实例化子类放入一个容器中,当其他应用程序需要时,为应用程序提供资源。

IOC&DI 入门

简介

在这里插入图片描述

控制反转

在这里插入图片描述
只需要在实现类上方加上一个注解@Component 即可实现将实现了放入容器中,使之成为容器的bean

具体代码
在这里插入图片描述

依赖注入

在这里插入图片描述
在这里插入图片描述
首先先解除依赖(也就是将”new 实例化子类“删除),之后注入依赖 就是在成员变量上面加一个注解@Autowired,运行时,IOC容器会提供该类型的bean对象,并赋值给该变量

IOC详解

详细种类

在这里插入图片描述
在这里插入图片描述
注意,controller想要成为bean,只能用自己独有的注解,但是因为@RestController注解以及包括了@Controller注解,所以,无需再加注解

在这里插入图片描述
注意要将文件放在启动类所在的包以及子包下

DI详解

在这里插入图片描述
@Autowired注解 默认是按照类型进行,但是一但有多个同一类型的bean,将会报错,通过以下几种方案解决,

第一,对想要的bean的IOC注解上加上@Primary注解,用来表示是想要该bean

第二,在@Autowired注解上加上@Qualifier(指定bean的名称,默认是类名首字母小写)

第三,如图
在这里插入图片描述

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

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

相关文章

Python pyqt5 qss美化窗口

效果 QSS QWidget#widget{background-color:#eef0f6;border-left:0.5px solid lightgray;border-right:0.5px solid lightgray;border-top:0.5px solid lightgray;border-bottom:0.5px solid #e5e5e5;border-top-left-radius: 5px;border-top-right-radius: 5px;}QWidget#widge…

Google测试之道丨如何从角色出发谈谈漫游测试?

谈到“漫游测试”,想必大多数人想起的都是James A.whittaker提出的全局探索性测试方法。他将软件测试比如为城市旅游,并划分了不同的区域(如:商业区、历史区、娱乐区等等),将测试人员比喻为旅游者进行城市旅…

vue3组件通信之pinia

简述 在vue3,vue的状态管理也迎来了新的变更,在vue3使用新的组件pinia来代理原有的vuex。pinia相比vuex,功能收敛了不少,比如不直接暴露setter方式,外部直接修改数据 两者的概念区别 vuex:集中式管理状态容器,可以实…

java之路—— Spring IOC 的详解与基本应用

创作不易,给个小支持一下呗 文章目录 前言一、IOC 基本概念二、理解IOC三、基本步骤 前言 首先在了解ioc之前,我们要先了解Spring的基本概念。 Spring是一个开源的Java应用程序开发框架,它提供了一套全面的解决方案,用于开发企业…

从此告别网速慢,轻松掌握浏览器缓存知识点!

文章目录 I. 介绍浏览器缓存的作用提高网页加载速度减少网络带宽消耗优化用户体验 II. 浏览器缓存的原理缓存机制缓存分类1. 强缓存2. 协商缓存 III. 强缓存缓存操作流程缓存过期机制如何设置强缓存 IV. 协商缓存304 Not Modified状态码缓存操作流程如何设置协商缓存 V. 缓存失…

kubernetes核心概念 Pod

Kubernetes集群核心概念 Pod 一、工作负载(workloads) 参考链接:https://kubernetes.io/zh/docs/concepts/workloads/ 工作负载(workload)是在kubernetes集群中运行的应用程序。无论你的工作负载是单一服务还是多个一同工作的服务构成&…

第2章-Java基本语法

Java基础知识图解 1. 关键字与保留字 关键字 Java保留字: 现有Java版本尚未使用, 但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字 goto 、 const 2. 标识符 Java 对各种变量、 方法和类等要素命名时使用的字符序列称为标识符…

Elasticsearch:增量快照如何工作?

作者:Lutf ur Rehman Elastic 提供许多由讲师指导的面对面和虚拟现场培训以及点播培训。 我们的旗舰课程是 Elasticsearch 工程师、Kibana 数据分析和 Elastic 可观测性工程师。 所有这些课程都会获得认证。如果你想更多了解这些认证方面的知识,请阅读文…

【CXP协议与CXP测试套件】

CXP协议 CoaXPress (简称CXP)是指一种采用同轴线缆进行互联的相机数据传输标准,主要用于替代之前的Camera Link协议,常见于科学相机、工业相机、医学图像、航空防务等场景。CXP是一个非对称的高速点对点串行传输协议,主要用于传输视频和静态…

GO 微信支付V3SDK回调踩坑

通过微信官网提示安装sdk外部库 SDK,工具 | 微信支付商户平台文档中心 下面只讲解微信支付回调部分 先成功下一单微信支付拿到支付回调的数据,方便后续调试 因为在go里面打印请求参数不方便我使用的php打印全部参数, 圈起来的部分是我们需…

centos8.x系统安装K8S,kubernetes集群v1.23.9,docker支持的最后一个版本

1. 部署环境主机(条件说明) 卸载podman,centos默认安装了podman容器(不管有没有,执行下总没错),可能与docker存在冲突 #环境准备 master 192.168.186.128 CentOS Linux release 8.5 (Core) n…

软件接口测试是什么?有哪些好用的接口测试工具?

在软件开发中,接口是不可避免的。软件接口测试是一种验证应用程序接口是否按照设计规范进行交互和协作的测试方法。接口测试是将模块之间的接口连接在一起以进行完整系统测试的关键部分。 当软件开发过程中不同模块之间需要数据交互,采用接口协议来实现…

Qt之事件过滤器讲解并且实现快捷键切换鼠标焦点

目录 1、需求背景2、使用Qt键盘事件3、安装事件过滤器4、事件处理级别 1、需求背景 现在有一个类似于下方图的ui,用户需要在输入前一行内容后,需要摁下指定案件能够跳转到下一行继续进行输入。 2、使用Qt键盘事件 一种更为直接的解决方案是子类化QLi…

【SpringCloud-6】Config配置中心

集群环境下,服务节点很多,我们不可能对每个服务都维护一套自己的配置,有修改时把每个节点都改一遍。 所以需要一个公共的配置文件,并且还能实现动态刷新。 在springcloud中,springcloud config组件就是一个配置中心&…

8年测试老鸟整理,软件测试面试问题-初中级,全覆盖问题...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 一般测试面试分为…

pytorch动态调整学习率torch.optim.lr_scheduler import MultiStepLR

from torch.optim.lr_scheduler import MultiStepLR 简单来说,就是分阶段调整学习率. 用法: model ANet(classes5) #加载模型 optimizer optim.SGD(params model.parameters(), lr0.05) #优化方法使用SGD#在指定的epoch值&#x…

极端交换————晴问算法

文章目录 1 题目2 思路3 实现 1 题目 2 思路 以此比较最大值、最小值&#xff0c;记录最大、最小值以及其下标位置&#xff0c;结束遍历后&#xff0c;交换其位置。 3 实现 #include<iostream> using namespace std;int main(){int n;scanf("%d", &n);i…

30分钟,认识 html 本质

30分钟&#xff0c;认识 html 本质 html 是什么&#xff1f;html 起源html 发展标签分类空间占用方式布局文本修饰流媒体标签 预定义符号 Symbols弃用的部分标签学习 html html 是什么&#xff1f; HTML的英文全称是 Hyper Text Markup Language&#xff0c;即超文本标记语言。…

redismariadb + keepalived 高可用

目录 机器准备 安装后服务 redis 安装redis mariadb 安装mariadb 启动和配置 互为主从同步配置 keepalived keepalived安装 修改主从 keepalived的配置 主从配置-mariadb监控 主从配置-redis监控 查看和使用 Keepalived Mariadb redis 机器准备 两台机器&…

计算机专业套装书书单推荐

1、深度学习经典教程 深度学习动手学深度学习 “花书”与沐神大作双剑合璧&#xff0c;入门深度学习看这一套就够了&#xff0c;来自一线科学家的经验总结&#xff0c;人工智能机器学习AI算法数据科学领域的重磅作品。理论实战&#xff0c;一套书帮你get深度学习的各种知识。 …