Inversion of Control(控制反转),别名Dependency Injection(依赖注入)
在IoC场景中,被注入对象和被依赖对象之间通过IoC Service Provider沟通,两者由IoC Service Provider统一管理
被注入对象有三种方式告诉IoC Service Provider需要哪些被依赖对象,即依赖注入的方式
- 构造方法注入:通过在构造方法中申明被依赖对象的参数列表,IoC Service Provider会检查被注入对象的构造方法,取得依赖对象列表,对象构造完成后,即进入就绪状态,缺点在于依赖对象多的时候,构造列表很长;构造方法无法被继承,且不能设置默认值;依赖对象不同需要不同的构造方法
- setter方法注入:对于Javabean对象来说,通常用
setXXX()
设置属性,当前对象只要为依赖对象所对应的属性添加setter方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中,相比于构造注入,这种方法可以在构造完成后再注入 - 接口注入:不提倡,因为要强制被注入对象实现不必要的接口,处于退役边缘
IoC的附加值:不会对业务对象产生很强的侵入性,对象具有更好的测试性、可重用性、可扩展性,解耦各种业务对象依赖关系额度对象绑定方式
IoC Service Provider
是一个抽象的概念,指代任何将IoC场景中的业务对象绑定到一起的实现,主要有两个职责:业务对象的构建管理、依赖绑定
IoC Service Provider有多种方式记录对象之间的对应关系
- 直接编码:通过程序编码将被注入对象和依赖对象注册到容器中,并确定相互之间的依赖注入关系
- 配置文件: