1.参与者,一般情况下是三方参与,一个是某个对象,另一个是IoC/DI的容器,还有一个世纪某个对象的外部资源。
某个对象是指任意的,普通的java对象。Ioc/DI容器简单说就是指用来实现Ioc/DI功能的一个框架程序,对象的外部资源
指的就是对象需要的,但是是从对象外部获取的,都统称为资源,比如,对象需要的其他对象,或者对象需要的文件资源等。
2.谁依赖于谁,当然是某个对象依赖于IoC/DI的容器了。
3.为什么需要依赖,对象需要IoC/DI容器来提供对象需要的外部资源。
4.谁注入了谁,很明显是IoC/DI容器注入某个对象。
5.到底注入了什么,就是注入某个对象所需要的外部资源。
6.谁控制谁,当然是IoC/DI容器控制对象了。
7.控制什么,主要是控制对象实例的创建。
8.为何叫反转,先看看正向的。如果要在A里面使用C,当然是直接在A里面去创建C的对象
反向就是说 A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向地注入到A类中。
9.小结:其实IoC/DI对编程带来的最大改变不是在代码上,而是在思想上,发生了“主从换位”的变化。
应用程序员来是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,
某个对象是指任意的,普通的java对象。Ioc/DI容器简单说就是指用来实现Ioc/DI功能的一个框架程序,对象的外部资源
指的就是对象需要的,但是是从对象外部获取的,都统称为资源,比如,对象需要的其他对象,或者对象需要的文件资源等。
2.谁依赖于谁,当然是某个对象依赖于IoC/DI的容器了。
3.为什么需要依赖,对象需要IoC/DI容器来提供对象需要的外部资源。
4.谁注入了谁,很明显是IoC/DI容器注入某个对象。
5.到底注入了什么,就是注入某个对象所需要的外部资源。
6.谁控制谁,当然是IoC/DI容器控制对象了。
7.控制什么,主要是控制对象实例的创建。
8.为何叫反转,先看看正向的。如果要在A里面使用C,当然是直接在A里面去创建C的对象
反向就是说 A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向地注入到A类中。
9.小结:其实IoC/DI对编程带来的最大改变不是在代码上,而是在思想上,发生了“主从换位”的变化。
应用程序员来是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,
被动地等待IoC/DI容器来创建并注入它所需要的资源中。
10.IoC/DI vs 工厂方法代码的对比
public class A{
//等待被注入进来
private C c = null;
//注入资源C的方法
public void setC(C c){
this.c = c;
}
public void t1(){
//这里需要使用C,可以又不能主动去创建C了,怎么办?
//反正就要求从外部注入,这样更省心,
//自己不用管怎么获取C,直接使用就好了
c.tc();
}
}
public interface C{
public void tc();
}
-------------------------------------------------------
public abstract class A1{
//工厂方法,创建C1,类似于从子类注入进来的途径
protected abstract C1 createC1();
public void t1(){
//这里需要使用C1类,可以不知道究竟使用哪一个
//也就不主动去创建C1了,怎么办?
//反正会在子类里面实现,这里不用管怎么获取C1,直接使用就好了
createC1().tc();
}
}
public class A2 extends A1{
protected C1 createC1(){
//真正的选择具体实现,并创建对象
return new C2();
}
}