1.IOC的基本概念
- 通常情况下,被注入对象会直接依赖于被依赖对象。但是,在IOC的场景下,二者之间通过IOC Service Provider来打交道,所有的被注入对象和依赖对象现在由IOC Service Provider统一管理。在这里就是通常的IOC容器所充当的角色。从被注入对象的角度看,与之前直接寻求依赖对象相比,依赖对象的取得方式发生了反转,控制也从被注入对象转到了IOC Service Provider那里。
- 构造方法注入:
1、IOC Service Provider会检查被注入对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象。同一个对象是不可能被构造两次的,因此,被注入对象的构造乃至其整个生命周期,应该是由IOC Service Provider来管理的。
2、构造方法注入方式比较直观,对象被构造完成后,即进入就绪状态,可以马上使用。 - setter方法注入:
1、对于JavaBean对象来说,通常会通过set和get方法来访问对应属性。
2、setter方法注入虽不像构造方法注入那样,让对象构造完成后即可使用,但相对来说更宽松一些,可以在对象构造完成后再注入。 - 接口注入
1、被注入对象如果想要IOC Service Provider为其注入依赖对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象。IOC Service Provider最终通过这些接口来了解应该为被注入对象注入什么依赖对象。
2、接口注入比较死板和烦琐,如果需要注入依赖对象,被注入对象就必须声明和实现另外的接口。
2.掌管大局的IOC Service Provider
1.IOC Service Provider的职责
- IOC Service Provider的职责相对来说比较简单,主要有2个:业务对象的构建管理和业务对象间的依赖绑定。
2.直接编码方式
- 在容器启动之前,我们就可以通过程序编码的方式将被注入对象和依赖对象注册到容器中,并确保它们相互之间的依赖注入关系。
- 通过为相应的类指定对应的具体实例,可以告知IOC容器,当我们要这种类型的对象实例时,请将容器中注册的、对应的那个具体实例返回给我们。
- 如果是接口注入,除了要注册相应对象,还要将注入标志接口与相应的依赖对象绑定一下,才能让容器最终知道是一个什么样的对应关系。
3.配置文件方式
4.元数据方式
- 我们可以直接在类中使用元数据信息来标注各个对象之间的依赖关系。
- 注解最终也要通过代码处理来确定最终的注入关系,从这点来说,注解方式可以算作编码方式的一种特殊情况。