个人简介
👀个人主页: 前端杂货铺
🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧
内容 | 参考链接 |
---|---|
Maven | 概念、IDEA集成、Maven坐标、依赖配置、依赖传递、排除依赖、依赖范围、生命周期 |
请求响应 | 请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果) |
文章目录
- 前言
- 三层架构
- 分层解耦
- 控制反转(IOC)与依赖注入(DI)
- IOC 详解
- DI 详解
- 总结
前言
大家好,这里是前端杂货铺。
本篇文章我们学习 Spring 的关键技术 => 控制反转(IOC)和 依赖注入(DI)。
三层架构
controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
service:业务逻辑层,处理具体的业务逻辑。
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。
分层解耦
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则:高内聚低耦合。
控制反转(IOC)与依赖注入(DI)
控制反转(IOC):对象的创建控制权由程序自身转移到外部(容器),这种思想成为控制反转。
依赖注入(DI):容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean 对象:IOC容器中创建、管理的对象,称之为 bean。
Service层 及 Dao层的实现类,交给 IOC 容器管理。
为 Controller 及 Service 注入运行时,依赖的对象。
@Component 注解:将当前类交给 IOC 容器管理,成为 IOC 容器中的 bean —— 控制反转
@AutoWired 注解:运行时,IOC 容器会提供该类型的 bean 对象,并赋值给该变量 —— 依赖注入
IOC 详解
要把某个对象交给 IOC 容器管理,需要在对应的类上加上如下注解之一:
注解 | 位置 |
---|---|
@Component | 声明 bean 的基础注解,不属于以下三类时,使用此注解 |
@Controller | @Component 的衍生注解,标注在控制器类上 |
@Service | @Component 的衍生注解,标注在业务类上 |
@Repository | @Component 的衍生注解,标注在数据访问类上(由于与 mybatis 整合,用的少) |
注意事项:
- 声明 bean 时,可以通过 value 属性指定 bean 的名字,如果没有指定,默认为类名(首字母小写)。
- 使用以上四个注解都可以声明 bean,但是 springboot 集成 web 开发中,声明控制器 bean 只能用 @Controller。
DI 详解
@Autowired 注解,默认是按照类型进行,如果存在多个相同类型的 bean,就会报一下错误:
解决方案如下:
总结
在Java中,AOP(面向切面编程)、IOC(控制反转)和DI(依赖注入)是三个重要的概念,它们在软件开发和架构设计中扮演着不同的角色。
概念 | 描述 | 关注点 |
---|---|---|
AOP(面向切面编程) | 面向切面编程是一种编程范式,它允许开发者将横切关注点(如日志、事务管理等)从业务逻辑中分离出来,并通过切面的方式统一处理。 | - 横切关注点:将跨越多个模块或类的关注点提取出来。 - 切面:定义横切关注点的模块化单元。 - 增强:在目标方法执行前后添加的代码,如日志记录、事务管理等。 |
IOC(控制反转) | 控制反转是一种设计原则,用于降低代码之间的耦合度。在IOC中,对象的创建和生命周期管理不再由对象本身控制,而是由外部容器(如Spring容器)负责。 | - 依赖关系的反转:传统上,对象A依赖于对象B时,A会主动创建B的实例。在IOC中,A不再负责B的创建,而是由外部容器创建B并将其注入到A中。 - 容器:负责对象的创建、配置、组装和管理。 |
DI(依赖注入) | 依赖注入是IOC的一种具体实现方式。在DI中,对象的依赖关系不是通过对象内部硬编码的方式实现,而是通过外部容器在运行时动态地注入到对象中。 | - 注入方式:包括构造函数注入、设值方法注入和接口注入等。 - 依赖的透明性:对象不需要知道其依赖的具体实现,只需声明依赖即可。 - 灵活性:依赖关系可以在运行时动态地改变,而无需修改代码。 |
- AOP 关注于横切关注点的模块化,通过切面来增强业务逻辑的功能。
- IOC 是一种设计原则,用于降低代码之间的耦合度,通过外部容器来管理对象的生命周期和依赖关系。
- DI 是 IOC 的一种具体实现方式,通过动态地将依赖注入到对象中来实现对象之间的解耦。
好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!
参考资料:
- JavaWeb开发(bilibili-黑马程序员)
- 菜鸟教程–Java