当前位置: 首页 > 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 是按照名称注入

三、结果展示

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

相关文章:

  • PS教程-萌新系统入门课课程视频+素材
  • String 学习总结
  • 力扣刷题 -- 232. 用栈实现队列
  • Android系统进程优先级
  • 组相对策略优化(GRPO):原理及源码解析
  • UE5 2D角色PaperZD插件动画状态机学习笔记
  • 支持TypeScript并打包为ESM/CommonJS/UMD三种格式的脚手架项目
  • 【python】三元图绘制(详细注释)
  • javascript 实战案例 二级联动下拉选框
  • 杭州白塔岭画室怎么样?和燕壹画室哪个好?
  • 6.RV1126-OPENCV 形态学基础膨胀及腐蚀
  • Spring Boot整合Druid与Dynamic-Datasource多数据源配置:从错误到完美解决
  • 1. 引言
  • SQL注入漏洞-上篇
  • Qwen2.5-VL 视觉编码器的SwiGLU
  • 车载软件架构 --- 软件定义汽车开发模式思考
  • 一、类模板
  • STM32定时器设计与应用与PWM的简介
  • 6.3本日总结
  • 文件批量重命名
  • joomla可以做预订类网站吗/搜索引擎是网站吗
  • 在美国克罗格做网站怎样/qq群排名优化
  • 换友链的网站/哈尔滨网站推广
  • 网站开发的著作权和版权/淘宝权重查询入口
  • 长春做网站的电话/百度seo优化招聘
  • 网站建网站建站/网站可以自己做吗