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

分层解耦

三层架构

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据,

service:业务逻辑层,处理具体的业务逻辑。

dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。

三层架构的作用就是将步骤细化,每一个类只执行一个操作,避免代码的耦合性 

在前端发送请求后,服务端往往要根据前端的请求做一些处理,如:根据前端请求往往要进行,访问数据库的信息(dao层),将得到的信息进行处理(service层)

 分层解耦

内聚:软件中各个功能模块内部的功能联系。

耦合:衡量软件中各个层/模块之间的依赖、关联的程度。

软件设计原则:高内聚低耦合

控制反转:1Inversion Of Control,简称I0C。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

依赖注入:Dependency Iniection,简称D。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

Bean对象:IOC容器中创建、管理的对象,称之为bean。


IOC&DI入门

①.Service层及 Dao层的实现类,交给IOC容器管理。

②.为Controller及Service注入运行时,依赖的对象。

③.运行测试。

IOC

Bean的声明

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

注意事项

声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。

使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller.

Bean组件扫描

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

@Componentscan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解

@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。

若是如下图就会报错,因为dao不在启动类所在包及其子包

 报错如下:

 解决方案:

手动设置@Componentscan注解

 按照规范,前面声明bean的四大注解一般都在启动类同一个包内,这样不用手动设置@Componentscan注解了

Bean注入

@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误:

通过以下几种方案来解决:

@Primary

 @Qualifier

 @Resource

@Resource 与 @Autowired区别

@Autowired 是spring框架提供的注解,而@Resource是IDK提供的注解

@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。

相关文章:

  • 【高端精品】最新手机版微信小程序(拼多多+京东)全自动操作项目
  • springcloud入门与实践
  • Django 中间件
  • 飞书API 2-1:如何通过 API 创建文件夹?
  • Endless OS简介
  • 【学习-华为HCIA数通网络工程师真题(持续更新)】(2024-6-16更)
  • 经典电源电路基础(变压-整流-滤波-稳压)
  • html是什么?http是什么?
  • vitepress搭建的博客系统cdn引入github discussions评论系统
  • Ubuntu 22.04 解决 firefox 中文界面乱码
  • CentOS手工升级curl记
  • 电子电气架构 --- 智能座舱功能应用
  • 华为云下Ubuntu20.04中Docker的部署
  • 单片机第五季-第八课:STM32CubeMx和FreeRTOS
  • AWS无服务器 应用程序开发—第十三章 小结2
  • 自己简单写的 事件订阅机制
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Apache的基本使用
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • express如何解决request entity too large问题
  • Redux系列x:源码分析
  • SQLServer之创建数据库快照
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Vue 重置组件到初始状态
  • 对象管理器(defineProperty)学习笔记
  • 分享几个不错的工具
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 今年的LC3大会没了?
  • 浏览器缓存机制分析
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端面试之闭包
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 自定义函数
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 大数据全解:定义、价值及挑战
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​MySQL主从复制一致性检测
  • ​学习一下,什么是预包装食品?​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (四)JPA - JQPL 实现增删改查
  • (杂交版)植物大战僵尸
  • 、写入Shellcode到注册表上线
  • .bat批处理(二):%0 %1——给批处理脚本传递参数