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

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.lqws.cn/news/109891.html

相关文章:

  • 【刷机】从pixel刷回miui12的过程记录
  • JS语法笔记
  • Office文档图片批量导出工具
  • 如何安装huaweicloud-sdk-core-3.1.142.jar到本地仓库?
  • Microsoft前后端不分离编程新风向:cshtml
  • SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
  • 博客操作规范
  • 书籍在其他数都出现k次的数组中找到只出现一次的数(7)0603
  • 【最新版】西陆洗车系统源码全开源+uniapp前端+搭建教程
  • 接口自动化测试之pytest 运行方式及前置后置封装
  • 【AI学习从零至壹】基于深度学习的⽂本分类任务
  • 红外遥控器接收实验:Simulink应用层开发
  • Unity Shader编程】之高级纹理
  • Lua和JS的继承原理
  • SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)
  • 吞咽与营养并重:进行性核上性麻痹的饮食之道
  • 什么是“音节”?——语言构成的节拍单位
  • FreeRTOS,其历史争议、兼容性、生态、未来展望
  • MYSQL索引详解及索引优化、分析
  • MyBatis常用注解全解析:从基础CRUD到高级映射
  • RL中的熵机制:策略熵坍缩分析与协方差正则化方法
  • 【FreeRTOS#1】多任务处理任务调度器任务状态
  • 【计算机网络 第8版】谢希仁编著 第六章应用层 题型总结1 编码
  • 队列的讲解:C++队列的使用
  • C++ set数据插入、set数据查找、set数据删除、set数据统计、set排序规则、代码练习1、2
  • 6月2日day43打卡
  • 【Python进阶】元类编程
  • 基于c++面向对象的设计(下)
  • 亚马逊Woot提报常见问题第一弹
  • C#基础:使用线程池执行并行任务