1. IOC(Inversion of Control)
IOC思想是反转资源获取的方向。传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了IOC之后,则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源。这种行为也被称为查找的被动形式。
举个例子,没有IOC的时候,我们要主动的去菜市场买菜;应用IOC之后只需要在自家院子里拿一个菜篮子等着菜送过来。
2. DI(Dependency Injection)
这个是IOC的另一种表达方式:即组件以一些预先定义好的方式接受来自容器的资源注入,相对于IOC而言,这种表述更直接。
3. 实例
需求:从容器中获取B对象,并使B对象的a属性被赋值为容器中A对象的引用。表述如下:
class A{}
class B{
private A;
public void setA(A a){
this.a = a;
}
}
在传统容器中,A和B没有关联关系:
则需要手动的引用:
A a = getA();
B b = getB();
b.setA(a);
然而在用IOC容器之后,容器已经自动的建立了关联关系:
这时只需要以下语句就可以:
B b = getB();