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)
上一篇 2022年6月29日 上午10:00
下一篇 2022年6月29日 上午10:16


相关推荐

  • 匿名内部类详解

    匿名内部类详解第一篇博客 由于最近一直在学习 Java 所以最近的博客主要都是 Java 中的知识点 希望和大家分享一下 有不对的地方希望编程大神 牛人指出 一定虚心受教 如果觉得 Endeavor 的博客有帮助的话 还希望大家顶顶 评论评论 谢谢啦 下面言归正传 匿名内部类 先举个例子吧 给大家看一下什么是匿名内部类 Endeavor 刚刚接触的时候 觉得哇哦 好奇怪的样子 这也太别扭了吧 不知道大家是什么感觉 为了进行对比

    2026年3月19日
    2
  • bs和cs的区别与优缺点_CS和CIS的联系与区别

    bs和cs的区别与优缺点_CS和CIS的联系与区别一,B/S结构(baiBrowser/Server,浏du览器/服务器模式),zhi是WEB兴起后的一种网络结构模式,WEB浏览器是客户端dao最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser英[‘braʊzə]美[‘braʊzɚ]),如NetscapeNavigator或InternetExplorer,服务器安装SQLServer、Oracle、MYSQL等数据库。浏览器通过WebServ

    2022年10月16日
    4
  • Stata:合成控制法程序分享

    Stata:合成控制法程序分享原文链接:https://www.lianxh.cn/news/bf1839debd082.htmlYiqingXu-R程序-一般化合成控制法 一个完整的合成控制法Stata范例-包含数据、假设检验和图形展示等||-PDF- Atooltorunapoolofsyntheticcontrols,conductinference,andproducevisualizations. 原文链接:https://www.lianxh.cn/news/b..

    2022年6月11日
    31
  • 背包问题九讲(转)

    背包问题九讲(转)

    2021年8月7日
    53
  • 给你个使用NAS私有云服务器的理由

    给你个使用NAS私有云服务器的理由  当我们的电脑硬盘或者手机内存被占满之后,可能很多人第一时间想到的就是用网盘或者U盘来进行扩充,但现如今相对于网盘和U盘更多的人愿意选择和使用外接式硬盘来进行资料备份和存储。是的,虽然外接式硬盘比网盘和U盘更安全,其实那只是你不知道有一种叫NAS存储服务器的情况才会想到外接式硬盘,NAS存储服务器在今年来不断被人们所接受!网盘充当着公有云的角色,NAS存储服务器充当着私有云的角色!  NAS…

    2022年6月29日
    36
  • linux下gdb调试方法与技巧整理「建议收藏」

    linux下gdb调试方法与技巧整理「建议收藏」目录一、gdb简介二、gdb使用流程1、启动gdb2、查看源码3、运行程序4、设置断点5、单步执行6、查看变量7、退出gdb三、gdb基本使用命令1、运行命令2、设置断点3、查看源码4、打印表达式5、查看运行信息6、分割窗口7、cgdb强大工具四、总结一、gdb简介GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下…

    2022年5月25日
    74

发表回复

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

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