IoC控制反转是什么意思?[通俗易懂]

IoC控制反转是什么意思?[通俗易懂]最近由于日本项目的需要,开始学习Spring框架的东西。虽然框架被日方公司进行了一定的修改,但Spring大体原理是不变的。Spring最大的特点,相信大家在网上看了许多,都知道是控制反转(IOC),或者叫依赖注入(DI),那么究竟什么是控制反转,什么是依赖注入呢?IOC(inversionofcontrol)控制反转模式;控制反转是将组件间的依赖关系从程序内部提到外部来管理; DI(depe…

大家好,又见面了,我是你们的朋友全栈君。

最近由于日本项目的需要,开始学习Spring框架的东西。虽然框架被日方公司进行了一定的修改,但Spring大体原理是不变的。Spring最大的特点,相信大家在网上看了许多,都知道是控制反转(IOC),或者叫依赖注入(DI),那么究竟什么是控制反转,什么是依赖注入呢?

IOC(inversion of control)控制反转模式;控制反转是将组件间的依赖关系从程序内部提到外部来管理; 

DI(dependency injection)依赖注入模式;依赖注入是指将组件的依赖通过外部以参数或其他形式注入;

看起来很绕是不是,这样,先把这个问题搁置在这里,咱们先谈一些别的东西。我先提一个东西:程序的耦合。看下面这个例子

class A {
  AInterFace a;
  A(){};
  Amethod() {
     a = new AInterfaceImpl();
  }
}

Class A中我先声明了一个借口a,然后构造了A(只不过什么都没写),定义了一个方法,在这个方法里面实例化AInterfaceImpl这个类出来,那么Class A和AInterfaceImpl就存在了耦合的关系,也可以说Class A依赖于AInterfaceImpl,没有AInterfaceImpl,Class A就创建不出来。

这只是简单举个例子,只是一种耦合关键,相信大家在实际写代码的时候肯定遇到过这样的情况,一个类里面要new好几个其他类,程序运行是全部new的,但实际运行的时候未必用得上,这样就造成了一定的运算和存储的浪费。

控制反转,就是把这种依赖关系剥离开(需要在class A中new的类,现在不用了,从其他地方获得),把里面对象的创建,依赖的代码,交给容器来实现(是的,Spring就是个容器),将原有的依赖关系(Class A和AInterfaceImpl依赖,而不是BInterfaceImpl)交给xml、properties这样的文件去描述。

IoC控制反转是什么意思?[通俗易懂]

这样做有什么好处?由于把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了。当然这种方式对于刚刚新接触的朋友来说可能不太习惯,经常忘记修改xml导致莫名其妙的错误也是家常便饭(别问我怎么知道的)。

所以控制反转IOC是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IOC容器,它就是一个专门用来创建对象的工厂(BeanFactory),你要什么对象,它就给你什么对象,有了 IOC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IOC容器了,通过IOC容器来建立它们之间的关系。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148316.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常用的算法-递归

    常用的算法-递归

    2021年8月17日
    63
  • flash咏鹅课件_咏鹅flash动画课件下载

    flash咏鹅课件_咏鹅flash动画课件下载咏鹅flash动画课件下载文欣赏咏鹅鹅,鹅,鹅,曲项向天歌。白毛浮绿水,红掌拨清波。本动画声情并茂的展示了这首著名的诗文,朗读者感情丰富,是很好的小学一年级语文Flash动画课件关键词:北师大版一年级上册语文Flash动画课件下载,一年级语文Flash动画课件下载,咏鹅Flash动画课件下载,.swf格式;更多关于《咏鹅》PPT课件,请点击咏鹅ppt标签。《咏鹅》PPT:《咏鹅》PPT第…

    2022年4月29日
    92
  • ideal zip包激活失效破解方法

    ideal zip包激活失效破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    37
  • Linux TCP状态TIME_WAIT 过多的处理[通俗易懂]

    Linux TCP状态TIME_WAIT 过多的处理

    2022年2月15日
    32
  • LoadLibrary失败,GetLastError= 193

    LoadLibrary失败,GetLastError= 193LoadLibrary失败,GetLastError=193LoadLibrary失败,GetLastError报错193时,一般是加载的dll所依赖的某个dll它的依赖项不存在所报的错,可以用DependencyWalker验证该dll所依赖的加载项是否都存在。DependencyWalker安装vs时一般都自带有,如果没有也可以去官网下载http://www.dependencywal…

    2022年7月13日
    11
  • 最小二乘法(多元)推导

    最小二乘法(多元)推导最小二乘法(多元)推导1声明本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。2最小二乘法简介最小二乘法是一种优化的方法,它主要是通过最小化误差的平方和来做函数拟合的方法。3最小二乘法多元推导有如下回归模型其中b0,b1,…bp,μ2×1,x2,…xp都是与无关的未知参数。这里设是一个样本。这里令残差平方和的表达式为…

    2022年5月13日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号