控制反转和依赖注入的区别

Spring bean
这个是spring framework的核心配置,spring是个网站,有好多个项目,spring一般指spring framework还有spring boot。他是控制反转技术的实现
我不用名词了,直接用java中的语法部分来解释,控制反转是,一个接口的实例,需要一个对象,这个控制方从程序员,变成了程序容器,(虽然程序容器也是程序员写的,但是容器不是你写的是别人写的,也可以说控制权从你的手里变成了别人的手里),想要创建对象,假设现在无法通过new创建对象,只能通过容器创建对象,就得通知一下容器创建一个对象,看,控制权在容器手里,虽然可能会说,啊,控制权还是自己,自己通知容器创建,但是如果容器不同意创建某个对象呢?(这个是可以实现的,看,容器有完全的控制权)只是一般来说它允许创建任何对象;

DI依赖注入,这个其实就是控制反转,只是说,控制反转只说了如何创建对象(通过容器),但是它没具体规定怎么创建,它也没说创建对象的时候构造参数怎么办,而依赖注入就规定了,它规定:“创建一个对象,要通过容器创建,并且,创建的时候要给予函数的参数,用于为对象注入参数”,依赖注入,是在控制反转的基础概念上,增加了一些限制,这个限制就是两个注入参数的方式,通过构造函数和setter;

DI和ICO这是spring官网对这两个概念的定义;
关系就是,ICO宏观定义了一个概念,DI具体解释这个概念,并添加一些限制
还有其他方法实现控制反转,比如创建一个对象,由容器实现,对象的参数放到对象的构造函数的里面,自己设置,不允许构造函数有参数;这也是个方法,因为对象创建放到了容器的手里,所以这也是个控制反转,但是他不是DI,因为不允许setter和构造函数,只允许在构造函数内部实现赋值,虽然没DI合理,但也是个实现的方法,我也把这个方式叫做DI(dependency Inner),显然此DI非彼DI;

### 控制反转依赖注入的概念 控制反转(Inversion of Control, IoC)是一种设计原则,用于降低软件模块之间的耦合度。其核心思想是将程序的控制流从传统的主程序调用子程序的方式转变为由框架或容器来管理程序的流程[^1]。在这种模式下,应用程序不再直接负责创建管理对象及其依赖关系,而是将这些职责交给外部容器来处理。 依赖注入(Dependency Injection, DI)是实现控制反转的一种具体技术手段。它通过将对象的依赖项作为参数传递给对象,而不是在对象内部直接实例化这些依赖项,从而实现解耦。这种方式使得代码更加灵活,易于测试维护[^2]。 ### 控制反转依赖注入区别 控制反转是一个更广泛的概念,而依赖注入是实现控制反转的一种方法。控制反转可以通过多种方式实现,例如事件驱动编程、模板方法模式等,但依赖注入是最常见的一种实现方式[^1]。 - **控制反转**:是一种设计原则,强调的是将程序的控制权转移给外部容器。 - **依赖注入**:是一种具体的实现技术,用于实现控制反转,强调的是通过外部注入的方式来解决对象之间的依赖关系。 ### 依赖注入的实现原理 依赖注入的实现通常涉及一个容器(IoC容器),该容器负责创建对象并管理它们的生命周期依赖关系。容器会根据配置信息(如XML文件或注解)来决定如何创建组装对象。常见的依赖注入方式包括构造函数注入、设值注入接口注入[^3]。 #### 构造函数注入 构造函数注入是通过构造函数来传递依赖对象。这种方式的优点是可以在对象创建时就确保所有必需的依赖都已经被提供。 ```java public class Service { private final Dependency dependency; public Service(Dependency dependency) { this.dependency = dependency; } } ``` #### 设值注入 设值注入是通过setter方法来设置依赖对象。这种方式的优点是可以动态地改变依赖对象。 ```java public class Service { private Dependency dependency; public void setDependency(Dependency dependency) { this.dependency = dependency; } } ``` #### 接口注入 接口注入要求被注入的对象必须实现某个特定的接口,该接口定义了注入的方法。 ```java public interface Injectable { void injectDependency(Dependency dependency); } public class Service implements Injectable { private Dependency dependency; @Override public void injectDependency(Dependency dependency) { this.dependency = dependency; } } ``` ### 总结 控制反转依赖注入都是为了提高软件系统的可扩展性可测试性,降低组件间的耦合度。控制反转是一种设计原则,而依赖注入是实现这一原则的具体技术之一。依赖注入通过外部容器来管理对象的创建依赖关系的注入,从而实现了控制反转的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值