什么是控制反转,控制表现在那里,反转在那里

请详细说明

IOC的基本概念是:
不创建对象,但是描述创建它们的方式。
在代码中不直接与对象和服务连接,
但在配置文件中描述哪一个组件需要哪一项服务。
容器负责将这些联系在一起。

其原理是基于OO设计原则的The Hollywood Principle:
Don‘t call us, we’ll call you(别找我,我会来找你的)。
也就是说,所有的组件都是被动的(Passive),
所有的组件初始化和调用都由容器负责。
组件处在一个容器当中,由容器负责管理。
  简单的来讲,就是由容器控制程序之间的关系,
而非传统实现中,由程序代码直接操控。这也就是所谓
“控制反转”的概念所在:控制权由应用代码中转到了
外部容器,控制权的转移,是所谓反转。

其实就是把东西都交给容器去管理.利用JAVA的反射机制读取配置文件中接口对应的具体实体类.

在写代码的时候只需要注入接口,至于接口对应的具体调用的是哪个类由配置文件决定.这样的话,修改起来只需要增加新的继承同一个接口的类就行,不需要大动干戈的去修改代码里面的类,可以很好的解耦合,在操作上也很方便.