Java Web-分层解耦

news/2024/5/11 18:21:16/文章来源:https://blog.csdn.net/fdvvg/article/details/137523396

三层架构

当我们所有代码都写在一起时,代码的复用性差,并且难以维护。就像我们要修改一下服务端获取数据的方式,从文本文档获取改为到数据库中获取,就难以修改,而使用三层架构能很好的解决这个问题。

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

如下图是实现的一个三层架构的一个案例

Controller层: 

@RestController
public class controllerTest {
//创建服务层对象peopleService peopleService =new peopleServiceA();@RequestMapping("/test1")public Result list(){
//调用逻辑层List<people> peopleList =peopleService.ListPeople();return new Result(1,"",peopleList);}}

Service层

//定义接口
public interface peopleDao {public List<people> ListPeople();
}
//实现类
public class peopleServiceA implements peopleService{private peopleDao pd =new peopleDaoA();
//逻辑处理@Overridepublic List<people> ListPeople() {List<people> lp=pd.ListPeople();return lp;}
}

Dao层

//定义接口
public interface peopleDao {public List<people> ListPeople();
}
//实现类
public class peopleDaoA implements peopleDao{
//获取数据@Overridepublic List<people> ListPeople() {List<people> lp= new ArrayList<>() ;return date.init(lp);}
}

解耦合

上述模块与模块之间耦合了,就像我们要给controller层换一个service对象,不再使用peopleserviceA了,而是使用peopleserviceB,那么不仅service层要修改,controller层的创建service层对象的代码也需要跟着更改。 我们的思想是通过一个容器来存储对象,需要的时候直接通过容器获取对象,这样就极大层度的解耦合了。

IOC控制反转,DI依赖注入

控制反转:就是把关于对象的创建的权限交给容器

依赖注入:容器为应用程序提供运行时所依赖的资源

Bean:IOC容器中创建管理的对象

IOC&DI入门

要将类交给IOC容器来处理,在类上加上注解就可以了。

注意:@RestController = @Controller + @ResponseBody 

  • Bean的名字可以通过注解的value属性来声明。没指定默认名字是类名小写。
  • 以上四个注解都可以声明bean,但在springBoot中集成web开发中,声明bean只能通过@Controller注解。

注解组件扫描:

声明bean的四大注解,想要生效,还需要被组件扫描注解@ComponentScan扫描。

@componentScan注解已经包含在了启动类注解@SpringBootApplication中。默认扫描的范围是启动类及其子包

要扫描其他的包可以传递参数进去。

DI依赖注入:

要完成依赖注入的操作,在成员变量上加上注解@autowired注解就可以了。IOC容器会创建bean对象并赋值给该变量。

@autowired注解默认按照类型进行的,如果存在多个相同类型的bean,会报错。可以通过以下方案解决。

1.将@Primary注解加在实现类上可以设置bean的优先级

2.用@Autowried注解配合Qualifier("bean名")使用。

3.通过使用@Resource(name="bean名")代替@Primary注解。

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

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

相关文章

PHP 中的 $2y$10,PHP 字符串加密函数 password_hash

PHP 用户密码加密函数 password_hash 自PHP5.5.0之后&#xff0c;新增加了密码散列算法函数(password_hash)&#xff0c;password_hash() 使用足够强度的单向散列算法创建密码的散列 Hash。 password_hash() 兼容 crypt()。 所以&#xff0c; crypt() 创建的密码散列也可用于 …

flask 访问404

当你的项目有自己的蓝图&#xff0c;有添加自己的前缀&#xff0c;也注册了蓝图。 在访问的路由那里也使用了自己的蓝图&#xff0c;如下图 然后你访问的地址也没问题&#xff0c;但是不管怎么样访问就是返回404&#xff0c;这个时候不要怀疑你上面的哪里配置错误&#xff0c;…

【网站项目】校园二手交易平台小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

外包干了25天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

【mT5多语言翻译】之五——训练:中央日志、训练可视化、PEFT微调

请参考本系列目录&#xff1a;【mT5多语言翻译】之一——实战项目总览 [1] 模型训练与验证 在上一篇实战博客中&#xff0c;我们讲解了访问数据集中每个batch数据的方法。接下来我们介绍如何训练mT5模型进行多语言翻译微调。 首先加载模型&#xff0c;并把模型设置为训练状态&a…

网络安全指南:安全访问 Facebook 的技巧

在当今数字化时代&#xff0c;网络安全问题越来越受到人们的关注。尤其是在社交媒体平台上&#xff0c;如 Facebook 这样的巨头&#xff0c;用户的个人信息和隐私更容易受到威胁。为了保护自己的在线安全&#xff0c;我们需要采取一些措施来确保在使用 Facebook 时能够安全可靠…

C语言进阶|顺序表

✈顺序表的概念及结构 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串.. 线性表在逻辑上是线性结构&#xff0c;也就说是连…

大话设计模式——23.备忘录模式(Memento Pattern)

简介 又称快照模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并且该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 UML图 应用场景 允许用户取消不确定或者错误的操作&#xff0c;能够恢复到原先的状态游戏存档、…

深度学习架构(CNN、RNN、GAN、Transformers、编码器-解码器架构)的友好介绍。

一、说明 本博客旨在对涉及卷积神经网络 &#xff08;CNN&#xff09;、递归神经网络 &#xff08;RNN&#xff09;、生成对抗网络 &#xff08;GAN&#xff09;、转换器和编码器-解码器架构的深度学习架构进行友好介绍。让我们开始吧&#xff01;&#xff01; 二、卷积神经网络…

【动手学深度学习】15_汉诺塔问题

注&#xff1a; 本系列仅为个人学习笔记&#xff0c;学习内容为《算法小讲堂》&#xff08;视频传送门&#xff09;&#xff0c;通俗易懂适合编程入门小白&#xff0c;需要具备python语言基础&#xff0c;本人小白&#xff0c;如内容有误感谢您的批评指正 汉诺塔&#xff08;To…

c/c++ |游戏后端开发之skynet

作者眼中的skynet 有一点要说明的是&#xff0c;云风至始也没有公开说skynet专门为游戏开发&#xff0c;换句话&#xff0c;skynet 引擎也可以用于web 开发 贴贴我的笔记 skynet 核心解决什么问题 愿景&#xff1a;游戏服务器能够充分利用多核优势&#xff0c;将不同的业务放在…

【随笔】Git 高级篇 -- 本地栈式提交 rebase | cherry-pick(十七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

QT Creator概览

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Qt Creator 概览 ①&#xff1a;菜单栏 ②&#xff1a;模式选择 ③&#xff1a;构建套件选择器…

在图片上画出mask和pred

画出论文中《Variance-aware attention U-Net for multi-organ segmentation》的图1&#xff0c;也就是在原图上画出mask和pred的位置。 新建一个文件夹 然后运行代码&#xff1a; import cv2 import os from os.path import splitext####第一次&#xff1a;把GT&#xff08…

天书奇谈_源码_搭建架设_3D最新天启版_自带假人

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 一. 效果演示 天书奇谈_源码_搭建架设 环境&#xff1a; centos7.6 &#xff0c; 放开所有端口 源码获取 https://…

Unity Pro 2019 for Mac:专业级游戏引擎,助力创意无限延伸!

Unity Pro 2019是一款功能强大的游戏开发引擎&#xff0c;其特点主要体现在以下几个方面&#xff1a; 强大的渲染技术&#xff1a;Unity Pro 2019采用了新的渲染技术&#xff0c;包括脚本化渲染流水线&#xff0c;能够轻松自定义渲染管线&#xff0c;通过C#代码和材料材质&…

Rust面试宝典第1题:爬楼梯

题目 小乐爬楼梯&#xff0c;一次只能上1级或者2级台阶。楼梯一共有n级台阶&#xff0c;请问总共有多少种方法可以爬上楼&#xff1f; 解析 这道题虽然是一道编程题&#xff0c;但实际上更是一道数学题&#xff0c;着重考察应聘者的逻辑思维能力和分析解决问题的能力。 当楼梯只…

华为2024年校招实习硬件-结构工程师机试题(四套)

华为2024年校招&实习硬件-结构工程师机试题&#xff08;四套&#xff09; &#xff08;共四套&#xff09;获取&#xff08;WX: didadidadidida313&#xff0c;加我备注&#xff1a;CSDN 华为硬件结构题目&#xff0c;谢绝白嫖哈&#xff09; 结构设计工程师&#xff0c;结…

HTTP与HTTPS:深度解析两种网络协议的工作原理、安全机制、性能影响与现代Web应用中的重要角色

HTTP (HyperText Transfer Protocol) 和 HTTPS (Hypertext Transfer Protocol Secure) 是互联网通信中不可或缺的两种协议&#xff0c;它们共同支撑了全球范围内的Web内容传输与交互。本文将深度解析HTTP与HTTPS的工作原理、安全机制、性能影响&#xff0c;并探讨它们在现代Web…

泰迪智能科技高职人工智能专业人才培养方案

人工智能行业近年来得到了快速发展&#xff0c;全球科技公司都在竞相投入人工智能的研发&#xff0c;从硅谷到北京&#xff0c;都在人工智能上取得了显著的进步。人工智能已经从学术研究转变为影响制造业、医疗保健、交通运输和零售等多个行业的关键因素。我国政策的积极推动下…