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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 退出卸载360、QAX 天擎,无需密码

    退出卸载360、QAX 天擎,无需密码退出卸载360、QAX天擎,无需密码天擎企业版,退出和卸载是需要管理员密码进入360天擎,点击设置=>防护中心=>自我保护功能,去掉勾选,确认\360Safe\EntClient\conf\EntBase.dat目录目录查找:在桌面右下角找到天擎应用程序右键,进入程序安装位置,即可进入安装目录EntBase.dat文件删除uipassqtpass两行=后面的两个字符串即可关闭退出卸载密码。这里如果没有权限无法修改,先将EntBase.dat复制到其他文件夹(

    2022年9月24日
    3
  • JSONObject与JSONArray的使用

    JSONObject与JSONArray的使用

    2021年12月9日
    69
  • getinstance方法(java replace函数)

    一般在单例模式下使用.getInstance()创建对象;但并不是所有有私有构造方法,对外通过getInstance方法提供实例的情况就是单例模式。注:单例模式:一个类有且只有一个实例。1,一个私有的构造器2,一个私有的该类类型的变量3,必须有一个共有的返回类型为该类类型的方法,用来返回这个唯一的变量eg:publicclassSingleton{

    2022年4月14日
    99
  • 分享pycharm如何安装插件(Plugins)

    分享pycharm如何安装插件(Plugins)链接:https://plugins.jetbrains.com/pycharm一、把插件的zip文件下载到本地二、File=>settings=>plugins本来可以像vscode一样直接搜直接安装,但是它一直转不出来,所以我先去上面的官网下载插件到本地再安装三、点开updates后面的小齿轮,选择installpluginfromdisk(从硬盘下载),选择刚刚下…

    2022年8月25日
    14
  • PO 模式

    PO 模式啊啊

    2022年5月1日
    74
  • linux分区及格式_ubuntu安装系统分区

    linux分区及格式_ubuntu安装系统分区操作环境:vmware虚机一、整体流程在使用fdisk/parted等分区工具对硬盘分区之后,是否使用LVM由用户决定: 1)可以直接对分区后的硬盘进行格式化操作,之后挂载分区; 2)也可以先用LVM逻辑卷管理工具对分区后的物理卷进行管理,之后再对逻辑卷进行格式化操作,之后挂载分区。(LVM的分区类型为8e) 使用LVM的好处是方

    2025年6月12日
    4

发表回复

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

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