在学习Spring框架的时候,咱们老是能见到IOC这个单词,也时常听到DI这个词,那么他们分别是什么意思呢?接下来就讲讲我的对于这两个概念的理解框架
1、IOC和DI概念ide
IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后再也不由本身自己的对象进行控制这个内置对象的建立,而是由第三方系统去控制这个内置对象的建立。学习
DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是经过注入的方式进行建立。this
那么IOC和DI这二者又是什么关系呢?spa
IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。设计
2、实例理解IOCcode
class Person{ private Wear clothe; public Wear getClothe() { return clothe; } public void setClothe(Wear clothe) { this.clothe = clothe; } public void Wear(){ clothe = new Sweater(); clothe.WearClothe(); } } interface Wear{ void WearClothe(); } class Sweater implements Wear{ @Override public void WearClothe() { // TODO Auto-generated method stub System.out.println("穿毛衣"); } } class Shirt implements Wear{ @Override public void WearClothe() { // TODO Auto-generated method stub System.out.println("穿衬衫"); } }
public static void main(String[] args){ Person person = new Person(); person.Wear(); }
在上面的代码中咱们定义一个Wear接口,两个实现了该接口的类Sweater和Shirt,在Person类的Wear须要调用Wear接口的WearClothe方法,传统的作法是在Person的Wear中建立该接口的实现类,而后经过该对象对调用这个方法。在Person对象的内部建立了这个对象,既是控制了这个对象,当咱们须要调用Shirt的WearClothe方法的时候就须要改动Person类中Wear方法的代码,去建立一个Shirt类对象。对象
而在IOC的设计思想中,咱们将再也不Person的内部进行建立Clothe属性的引用对象,而是在外界建立该对象,而后注入到Person对象中。代码实现以下:blog
修改Person类的Wear方法:接口
public void Wear(){ clothe.WearClothe(); }
在main方法中调用:
public static void main(String[] args){ Wear wear= new Sweater(); Person person = new Person(); person.setClothe(sweater); person.Wear(); }
经过在外界建立一个Wear接口的实现类对象,而后将该对象传入person对象中,将person对象对于sweater对象的控制反转,person对象再也不进行Wear接口实现对象的建立。若是咱们须要调用Shirt的wear方法,只须要更改建立Shirt对象,再也不须要修改Person类内部的方法,就能够实现了。
这就是我理解的IOC,简单来讲就是把原本在类内部控制的对象,反转到类外部进行建立后注入,再也不由类自己进行控制,这就是IOC的本质。