千家信息网

如何理解spring框架中的ioc

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这期内容当中小编将会给大家带来有关如何理解spring框架中的ioc,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。摘要: 关于spring框架中的ioc的幽默解释
千家信息网最后更新 2026年10月31日如何理解spring框架中的ioc

这期内容当中小编将会给大家带来有关如何理解spring框架中的ioc,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

摘要: 关于spring框架中的ioc的幽默解释 IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转...

IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。

下面我们以几个例子来说明什么是IoC

假设我们要设计一个Girl和一个Boy类,其中Girl有kiss方法,即Girl想要Kiss一个Boy。那么,我们的问题是,Girl如何能够认识这个Boy?

在我们中国,常见的MM与GG的认识方式有以下几种:

1 青梅竹马;

2 亲友介绍;

3 父母包办

那么哪一种才是***呢?

青梅竹马:Girl从小就知道自己的Boy。

public class Girl {  void kiss(){  Boy boy = new Boy();  }  }

然而从开始就创建的Boy缺点就是无法在更换。并且要负责Boy的整个生命周期。如果我们的Girl想要换一个怎么办?(笔者严重不支持Girl经常更换Boy)

亲友介绍:由中间人负责提供Boy来见面

public class Girl {  void kiss(){  Boy boy = BoyFactory.createBoy();  }  }

亲友介绍,固然是好。如果不满意,尽管另外换一个好了。但是,亲友BoyFactory经常是以Singleton的形式出现,不然就是,存在于 Globals,无处不在,无处不能。实在是太繁琐了一点,不够灵活。我为什么一定要这个亲友掺和进来呢?为什么一定要付给她介绍费呢?万一***的朋友爱上了我的男朋友呢?

父母包办:一切交给父母,自己不用费吹灰之力,只需要等着Kiss就好了。

http://java.chinaitlab.com/UploadFiles_8734/200701/20070123095103329.gif>;  public class Girl {  void kiss(Boy boy){  // kiss boy  boy.kiss();  }  }

Well,这是对Girl***的方法,只要想办法贿赂了Girl的父母,并把Boy交给他。那么我们就可以轻松的和Girl来Kiss了。看来几千年传统的父母之命还真是有用哦。至少Boy和Girl不用自己瞎忙乎了。

这就是IOC,将对象的创建和获取提取到外部。由外部容器提供需要的组件。

我们知道好莱坞原则:"Do not call us, we will call you." 意思就是,You, girlie, do not call the boy. We will feed you a boy。

我们还应该知道依赖倒转原则即 Dependence Inversion Princinple,DIP。

Eric Gamma说,要面向抽象编程。面向接口编程是面向对象的核心。

组件应该分为两部分,即

Service, 所提供功能的声明

Implementation, Service的实现

好处是:多实现可以任意切换,防止 "everything depends on everything" 问题.即具体依赖于具体。

所以,我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话,还可以kiss可爱的kitten和慈祥的grandmother。

https://cache.yisu.com/upload/information/20210521/332/454389.gif>;

二、IOC的type

IoC的Type指的是Girl得到Boy的几种不同方式。我们逐一来说明。

IOC type 0:不用IOC

public class Girl implements Servicable {  private Kissable kissable;  public Girl() {  kissable = new Boy();  }  public void kissYourKissable() {  kissable.kiss();  }  }

Girl自己建立自己的Boy,很难更换,很难共享给别人,只能单独使用,并负责完全的生命周期。

IOC type 1,先看代码:

public class Girl implements Servicable {  Kissable kissable;  public void service(ServiceManager mgr) {  kissable = (Kissable) mgr.lookup("kissable");  }  public void kissYourKissable() {  kissable.kiss();  }  }

这种情况出现于Avalon Framework。一个组件实现了Servicable接口,就必须实现service方法,并传入一个ServiceManager。其中会含有需要的其它组件。只需要在service方法中初始化需要的Boy。

另外,J2EE中从Context取得对象也属于type 1。

它依赖于配置文件

   …    

IOC type 2:

public class Girl {  private Kissable kissable;  public void setKissable(Kissable kissable) {  this.kissable = kissable;  }  public void kissYourKissable() {  kissable.kiss();  }  }

Type 2出现于Spring Framework,是通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。

       

IOC type 3

public class Girl {  private Kissable kissable;  public Girl(Kissable kissable) {  this.kissable = kissable;  }  public void kissYourKissable() {  kissable.kiss();  }  }

这就是PicoContainer的组件 。通过构造函数传递Boy给Girl。

PicoContainer container = new DefaultPicoContainer();  container.registerComponentImplementation(Boy.class);  container.registerComponentImplementation(Girl.class);  Girl girl = (Girl) container.getComponentInstance(Girl.class);  girl.kissYourKissable();

上述就是小编为大家分享的如何理解spring框架中的ioc了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

就是 控制 亲友 方法 父母 组件 框架 不用 对象 接口 设计 青梅竹马 内容 内部控制 原则 周期 意味 文件 方式 是在 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 科技金融是不是互联网金融 金融科技还是互联网 互联网科技金融 大白互联网科技 互联网科技股有哪些 科技伦理 互联网公司 华中科技有哪些互联网大佬 开启互联网科技时代小说 天速互联网络科技有限公司 互联网科技实习生岗位职责 剑昆互联网络科技有限公司临桂 群盈汇互联网科技有限公司 山东有哪些互联网科技公司 每天都有哪些好的互联网科技 浙南科技城互联网大厦招聘 互联网科技股为什么大涨 广东鹅鹅鹅互联网科技有限公司 深圳互联网科技园地址 互联网科技创业有什么好项目 西安纸贵互联网科技有限公司 万易互联网科技有限公司 互联网科技公司的市场部门 卫星互联网科技股票 隆华科技工业互联网 济南华为互联网科技产业总部基地 互联网科技商业 新兴科技互联网创新大赛颁奖典礼 企晟互联网信息科技有限公司 广州互联网高科技取餐柜
0