反转控制(Inverse of Control, IOC)思想最核心的地方就是:资源不由提供方和使用方管理,而是通过不使用资源的第三方管理
。这样的好处是:
- 资源集中管理,实现资源的可配置和易管理。
- 降低了使用资源双方的依赖程度,也就是我们说的耦合度。
依赖注入(Dependency Injection)则是使用方开放接口,在它需要的时候,能够将资源传递进来(注入)。
反转控制是目的,依赖注入是手段。
通常我们在编程的时候是面向接口编程
,也就是不需要关注具体的实现类。这个时候只要通过依赖注入,将需要的具体实现类注入进来即可。并且这个具体的实现类,我们也不需要直接通过import方式引用
,而是通过反转控制,从Spring容器中根据别名获取具体的实现类。这样就避免了和具体的实现类的耦合依赖。
例如:
public class Worker {
@Autowired
@Qualifier("ToolA")
ITool tool;
public void doingjob(){
tool.work();
}
}
public class ToolA implements ITool {
@Override
public void work(){
......
}
}
public interface ITool{
void work();
}
我们在Worker工人类中需要是要工具类,但是并不需要直接和具体的某个工具类直接耦合,而是通过依赖注入将ToolA注入进来。实际调用的时候就是调用的ToolA的work()方法。这一切都是Spring的IOC框架帮我们处理好的
THE END.