什么是控制反转 ?
顾名思义,就是主动变被动。依赖注入就是控制反转的一种表现形式,本来自己要用的对象自己主动创建就好,现在改为依赖注入,需要通过外部程序才能使用自己需要的对象。
所以, 控制反转其实是一个很广泛的概念,而依赖注入是控制反转的一个例子。
IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分离。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
也可以说,是通过把一部分控制器转交给外部容器和配置文件,从而实现解耦。
事实上,但凡框架就肯定会涉及控制反转。 传统的程序开发,人们总是从main 函数开始,调用各种各样的库来完成一个程序,如此开发者控制着整个运行过程.
package demo;
public class Activity {
public Activity(){
this.onCreate();
}
public void onCreate(){
System.out.println("onCreate called");
}
public void sayHi(){
System.out.println("Hello world!");
}
public static void main(String[] args) {
Activity a = new Activity();
a.sayHi();
}
}
而人们使用框架(Framework)开发时,是框架控制着整个运行过程,也是框架和普通类库最大的不同点.
package demo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.append("Hello ");
tv.append("world!");
setContentView(tv);
}
}