菜鸟之路Day28一一分层解耦

简介: 本文《菜鸟之路Day28——分层解耦》由作者blue撰写于2025年4月29日,主要探讨软件开发中的三层架构与分层解耦概念。文章首先介绍了三层架构:Controller(控制层)、Service(业务逻辑层)和DAO(数据访问层),并深入讲解了“高内聚低耦合”的软件设计原则。接着,文章详细说明了控制反转(IOC)与依赖注入(DI)的实现方式,包括如何通过注解声明Bean对象、组件扫描以及解决多Bean冲突的方法(如@Primary、@Qualifier和@Resource)。内容结合实际开发场景,为初学者提供了清晰的指导。

菜鸟之路Day28一一分层解耦

作者:blue

时间:2025.4.29

0.概述

文章内容学习自黑马程序员BV1m84y1w7Tb

1.三层架构

image-20250429101036700.png

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

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

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

2.分层解耦

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

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

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

image-20250429102954345.png

如何解耦呢?

image-20250429103647634.png

控制反转(IOC):对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转

依赖注入(DI):容器为应用程序提供运行时,所依赖的资源,称之为依赖注入

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

3.IOC & DI

3.1步骤

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

//在实现类上加上@Component注解
@Component //将当前类交给IOC容器管理,成为IOC容器中的bean

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

//在Controller及Service所需的对应的变量上加上@Autowired注解
@Autowired //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 - 依赖注入

3.2Bean的声明

注解 说明 位置
@Component 声明bean的基础注解 不属于以下三类时,用此注解
@Controller @Component的衍生注解 标注在控器器类上(controller)
@Service @Component的衍生注解 标注在业务类上(Service)
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)

注意事项:

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

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

Bean组件扫描

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

@ComponentScan注解虽然没有显示配置,但是实际上已经包含在启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包

3.3Bean注入

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

解决存在多个相同类型的bean的问题

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

①@Primary

@Primary //通过@Primary注解来指定使用哪一个
@Service
public class EmpServiceA implements EmpService {
   
}

②@Autowired+@Qualifier("bean的名称")

@RestController
public class EmpController {
   
    @Autowired
    @Qualifier("empServiceA")
    private Empservice empService;
}

③@Resource(name="bean的名称")

@RestController
public class EmpController {
   
    @Resource(name="empServiceB")
    private Empservice empService;
}

注意@Resource与@Autowired区别

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

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

目录
相关文章
|
10月前
|
人工智能 前端开发 搜索推荐
利用通义灵码和魔搭 Notebook 环境快速搭建一个 AIGC 应用 | 视频课
当我们熟悉了通义灵码的使用以及 Notebook 的环境后,大家可以共同探索 AIGC 的应用的更多玩法。
859 124
|
10月前
|
存储 API C++
Cpp实现window上cmd执行效果
这段代码实现了一个简单的 Windows 命令行模拟器,支持用户输入命令并显示执行结果。程序通过 `GetCurrentDirectoryA` 获取当前目录,并用 `_popen` 执行命令,支持 `cd` 切换目录和 `exit` 退出功能。用户输入的命令会通过管道捕获输出并打印,返回码用于判断命令执行是否成功。代码结合了 C++ 标准库与 Windows API,展示了如何在 Windows 环境下操作命令行。
239 19
|
9月前
|
存储 人工智能 安全
MCP 规范新版本特性全景解析与落地实践
MCP Specification 在 2025-03-26 发布了最新的版本,本文对主要的改动进行详细介绍和解释
1789 145
|
10月前
|
人工智能 API 数据库
MCP Server 开发实战 | 大模型无缝对接 Grafana
以 AI 世界的“USB-C”标准接口——MCP(Model Context Protocol)为例,演示如何通过 MCP Server 实现大模型与阿里云 Grafana 服务的无缝对接,让智能交互更加高效、直观。
3336 124
|
9月前
|
SQL 关系型数据库 MySQL
菜鸟之路Day30一一MySQL之DML&DQL
本文介绍了MySQL中DML(数据操作语言)和DQL(数据查询语言)的核心用法。DML主要包括插入(insert)、更新(update)和删除(delete)语句,通过具体示例演示了如何对表数据进行增删改操作。DQL则聚焦于数据查询,涵盖基本查询、条件查询、聚合函数、分组查询、排序查询和分页查询等内容。文章通过丰富的SQL语句实例,帮助读者掌握如何高效查询和操作数据库中的数据,适合初学者学习和实践。
321 12
|
9月前
|
SQL 存储 关系型数据库
菜鸟之路Day29一一MySQL之DDL
本文《菜鸟之路Day29——MySQL之DDL》由作者blue于2025年5月2日撰写,主要介绍了MySQL中的数据定义语言(DDL)。文章详细讲解了DDL在数据库和表操作中的应用,包括数据库的查询、创建、使用与删除,以及表的创建、修改与删除。同时,文章还深入探讨了字段约束(如主键、外键、非空等)、常见数据类型(数值、字符串、日期时间类型)及表结构的查询与调整方法。通过示例代码,读者可以更好地理解并实践MySQL中DDL的相关操作。
313 11
|
11月前
|
算法
蓝桥杯16天刷题计划一一Day02
这是蓝桥杯16天刷题计划的第二天内容,由作者blue于2025年3月28日整理。当天训练重点为二分法,包含多道经典题目解析与代码实现,如有序数组查找、砍树问题、木材加工等。文章针对二分法的应用场景进行了深入讲解,并通过实例演示了如何优化算法效率,适合对二分法不熟悉的初学者学习和练习。
267 5
|
10月前
|
前端开发 JavaScript 开发者
《解锁CSS Flex布局:重塑现代网页布局的底层逻辑》
CSS Flex布局(弹性盒子布局)是现代网页设计中的重要技术,彻底革新了传统布局方式。它通过“容器”与“项目”的概念,提供灵活的空间分配与排列规则,轻松实现水平/垂直居中、等高列、响应式布局等复杂需求。相比传统方法,Flex布局代码简洁高效,显著提升开发体验与页面适应性。然而,浏览器兼容性及对极复杂场景的支持仍需注意。作为网页布局的核心工具之一,Flex布局推动了用户体验与设计创新的进一步发展。
200 13
|
10月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL下载与安装
本文介绍了MySQL的下载与安装流程(2025.4.29,作者:blue)。主要内容包括:1) 从官方地址下载MySQL;2) 解压文件并配置环境变量;3) 注册MySQL服务并通过命令行验证;4) 启动和停止MySQL服务;5) 修改默认账户密码;6) 登录MySQL。通过详细步骤和截图,帮助用户顺利完成安装与初始配置。
2566 13
|
10月前
|
自然语言处理 测试技术 Serverless
Qwen3开源发布:Think Deeper, Act Faster!社区推理、部署、微调、MCP调用实战教程来啦!
Qwen3开源发布:Think Deeper, Act Faster!社区推理、部署、微调、MCP调用实战教程来啦!
2581 22