spring和依赖倒置思想的落地实现

简介: 在《手撕JAVA(四)低依赖架构思想》一文中阐述了如何通过依赖倒置来解耦,并且得到了结论这种架构思想的落地实现就是Spring。很多有一定J2EE开发经验的读者读到此处会反驳,依赖倒置其实就是遵循了面向接口编程的思想,Spring的核心组件IOC并不是面向接口编程啊,它管理的还是一个一个的类。在解答这个疑惑之前,顺带提个题外话——关于面向接口编程。

在《手撕JAVA(四)低依赖架构思想》一文中阐述了如何通过依赖倒置来解耦,并且得到了结论这种架构思想的落地实现就是Spring。很多有一定J2EE开发经验的读者读到此处会反驳,依赖倒置其实就是遵循了面向接口编程的思想,Spring的核心组件IOC并不是面向接口编程啊,它管理的还是一个一个的类。


在解答这个疑惑之前,顺带提个题外话——面向接口编程

很多人在初学JAVA,尤其是计算机专业的学生,老师都会讲到JAVA中面向接口编程会为程序带来很多灵活性。如何理解老师讲的这句话?我们不妨来想想,依赖倒置降低依赖,就是建立在面向接口编程带来的可以方便切换实现类而程序其他地方感知不强烈这一优点上。


接下来解释一下笔者为什么说spring就是依赖倒置思想的落地实现?

确实,Spring的核心IOC,其实本质上就是一个容器,而这个容器里面都是管理的一个个JAVA类,和本质上是面向接口编程的依赖倒置思想扯不上什么直接关系。但为什么笔者明明知道这个结论一眼下去看似是错的还要这样说喃?其实之所以说Spring是依赖倒置思想的落地实现是因为Spring的核心——IOC,就是在整个思想落地实现过程中为了解决某些问题而设计出来的一个组件。

虽然Spring的设计理念和依赖倒置思想没有直接关系,但是确实是因为有了依赖倒置思想的落地实现过程才诞生了Spring!!!其实真正和依赖倒置思想面向接口解耦这一逻辑直接相关的是现在Spring体系中常用的分层逻辑——controller、service+Impl、Mapper(如果是其他持久化框架,此处就是其他类型的dao,此处以mapper为例)。

做过spring体系开发的读者应该很快就能理解到笔者上面说的话,controller、service+Impl、Mapper层层之间的依赖关系是严格按照依赖倒置思想来落地实现的。


读到此处很多很多读者也许会问,这里也没有spring什么事情啊,我不用spring,在controller中直接new  serviceImpl也可以啊。


那我们为什么要设计出Spring?它在整个依赖倒置思想落地实现的过程中的作用到底是什么?


好的,下面三张图来解释两个问题,弄懂了这两个问题也就彻底明白了现在流行的分层,原因到底是什么?Spring到底为什么被设计出来。就会彻底明白Spring和解耦之间的关系!


1、为什么要用service+Impl,而不直接使用Impl?


2、Spring到底是为了什么而设计出来的?

图1、直接依赖于Impl

20190718204319394.png

图2、依赖于Service

20190718204715495.png

图3、Spring容器介入

20190718205045595.png


解释三张图:

图1:①依赖度太高,不便于切换。②自己去new,内存管理混乱

图2:①采用依赖倒置的思想,降低依赖度,切换方便。②内存管理依旧混乱。

图3:面向接口、降低依赖;容器介入,管理内存。

目录
相关文章
|
XML Java 数据格式
Spring.Net——理解控制反转和依赖倒置
一,控制反转(Inversion of Control,缩写IoC)和依赖注入(Dependency Injection,简称DI)        1,控制反转                         IoC(Inversion of Control),这是spring的核心,贯穿始终。
1197 0
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
219 2
|
1天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
29 14
|
23天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
41 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
43 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
18天前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
38 5
|
23天前
|
Java 容器
springboot自动配置原理
启动类@SpringbootApplication注解下,有三个关键注解 (1)@springbootConfiguration:表示启动类是一个自动配置类 (2)@CompontScan:扫描启动类所在包外的组件到容器中 (3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效
|
22天前
|
安全 Java 测试技术
如何在 Spring Boot 中禁用 Actuator 端点安全?
如何在 Spring Boot 中禁用 Actuator 端点安全?
62 1
|
1月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
41 2