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

web第八次课后作业--分层解耦

一、分层

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

二、解耦

可是这三层之间的耦合度太高,牵一发而动全身
我们的解决思路是:

提供一个容器,容器中存储一些对象(例:EmpService 对象)
controller 程序从容器中获取 EmpService 类型的对象
我们想要实现上述解耦操作,就涉及到 Spring 中的两个核心概念:

  1. 控制反转: Inversion Of Control,简称 IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
    对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC 容器或 Spring 容器

  2. 依赖注入: Dependency Injection,简称 DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。(通常在Service和Controller层)

    • Controller 程序中注入依赖的 Service 层对象
    • Service 程序中注入依赖的 Dao 层对象

例:EmpController 程序运行时需要 EmpService 对象,Spring 容器就为其提供并注入 EmpService 对象。

  • IOC 容器中创建、管理的对象,称之为: bean 对象
  • 在 IOC 容器中,每一个 Bean 都有一个属于自己的名字,可以通过注解的 value 属性指定 bean 的名字。如果没有指定,默认为类名首字母小写

那如果在 IOC 容器中,存在多个相同类型的 bean 对象,会出现什么情况呢?
在这里插入图片描述

Spring 提供了以下几种解决方案:

1. @Primary

当存在多个相同类型的 Bean 注入时,加上@Primary 注解,来确定默认优先注入。

2. @Qualifier
  • 指定当前要注入的 bean 对象。 在@Qualifier 的 value 属性中,指定注入的 bean 的名称。
  • @Qualifier 注解不能单独使用,必须配合@Autowired 使用
    在这里插入图片描述
3. @Resource

是按照 bean 的名称进行注入。通过 name 属性指定要注入的 bean 的名称。

在这里插入图片描述

@Autowird 与 @Resource 的区别

  • @Autowired 是 spring 框架提供的注解,而@Resource 是 JDK 提供的注解
  • @Autowired 默认是按照类型注入,而@Resource 是按照名称注入

三、结果展示

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/2401011.html

相关文章:

  • MySQL 事务深度解析:面试核心知识点与实战
  • 使用Redis作为缓存,提高MongoDB的读写速度
  • 【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
  • Kafka消息队列笔记
  • 机器人变量类型与配置
  • nssm配置springboot项目环境,注册为windows服务
  • 20-项目部署(Docker)
  • Python学习(6) ----- Python2和Python3的区别
  • 零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
  • SAP学习笔记 - 开发18 - 前端Fiori开发 应用描述符(manifest.json)的用途
  • 分类与逻辑回归 - 一个完整的guide
  • 一键试衣,6G显存可跑
  • 跟着deepseek浅学分布式事务(2) - 两阶段提交(2PC)
  • 【仿生机器人软件架构】通过整合认知系统实现自主精神性——认知系统非常具有可执行性
  • 20250602在Ubuntu20.04.6下修改压缩包的日期和时间
  • Fullstack 面试复习笔记:项目梳理总结
  • 星闪开发之Server-Client 指令交互控制OLED灯案例
  • MySQL补充知识点学习
  • 《前端面试题:CSS有哪些单位!》
  • [ctfshow web入门] web80
  • 【设计模式-4.5】行为型——迭代器模式
  • C++_核心编程_继承中的对象模型
  • 使用cephadm离线部署reef 18版并配置对接openstack
  • Redis最佳实践——性能优化技巧之缓存预热与淘汰策略
  • 2024年数维杯国际大学生数学建模挑战赛D题城市弹性与可持续发展能力评价解题全过程论文及程序
  • 3D Gaussian splatting 06: 代码阅读-训练参数
  • QT聊天项目DAY13
  • Web3如何重塑数据隐私的未来
  • 【鸿蒙】HarmonyOS NEXT之如何正常加载地图组件
  • 前端框架进化史