IOC概念介绍以及简单实现

发表于2019-04-02
评论0 3.6k浏览

什么是IOC

 

百度百科是对于IOC是这么介绍的,控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

 

需要注意一下两个问题:

1.谁控制谁 
2.反转了什么 

在没有IOC之前,我们的程序应该是这样的:

Child son = new Child();

 

当我们需要一个名叫son的Child对象时,我们就会写程序去“new”一个,自己动手丰衣足食,没毛病,这最基本不过。这个例子中,我们或者说我们写的程序“new Child()”控制生成了一个对象,是我们手动new的。 

使用IOC之后:

@某注解 
Child son; 
son.setXXX(); 
son.setYYY(); 
 

相比之前,我们不用手动new了,直接son.setXXX()竟然没有报空指针。也就是说生成一个对象的事情,交给框架去做了。 

如果你还不理解这个概念,那就讲个吃货的故事: 

你饿了要吃饭,以前要吃鱼要自己拿着菜单跟着做,后来有了外卖平台,自己不用做也有饭吃了,你只要在上面点这道菜,就会帮你做好,送到你家。以前是你自己动手丰衣足食,后面是别人帮你做,这个角色变化,就是对“鱼”的控制由你反转到了别人。类比过来就是,对对象的控制由我们的程序反转到了框架。 

 

IOC使用
 

我们抽象出一个接口:

public interface CookFish{  
void cook(); 

 

然后会

public class BraiseFish implement CookFish{  
@Override 
void cook(){  
// 红烧 


public class SteamedeFish implement CookFish{  
@Override 
void cook(){  
 // 清蒸 


 

比如有个类A

public class A {  
CookFish cookFish = new BraiseFish(); 
cookFish.cook(); 

 

对类A做修改

public class A {  
//CookFish cookFish = new BraiseFish(); 
CookFish cookFish = new SteamedeFish(); 
cookFish.cook(); 

 

小结:CookFish的生成(new的动作)是由A控制的,而IOC的思想就是,生成CookFish由框架去做。类A只需要关心cook这件事(业务逻辑)就好了,生成鱼的逻辑的都由框架去做。

 

既然IOC的工作就是框架帮我们生成对象实例,那么就要从java生成对象的几个方法说起: 
1.new一个 
2.反射 
3.反序列化 
4.clone 

后面两个使用的先决条件是,已经有一个“模版”对象,只有前两个才是从无到有生成,所以思路应该从前两个入手。 
1.new 一个,Dagger的IOC方式; 
2.反射,Spring 的IOC方式。

 

了解IOC是什么以后,在借助介绍的使用案例,详细大家都会使用了吧。

  • 允许他人重新传播作品,但他人重新传播时必须在所使用作品的正文开头的显著位置,注明用户的姓名、来源及其采用的知识共享协议,并与该作品在磨坊上的原发地址建立链接
  • 可对作品重新编排、修改、节选或者以作品为基础进行创作和发布
  • 不可将作品进行商业性使用

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: