spring IoC学习 ------IoC基本概念
IoC(Inversion of Control )中文翻译为控制反转,指的是在创建对象这个动作不由程序发动,而是由别的程序进行注入,在没有使用IoC之前,我们构造对象方法大概有一下几种:
1)使用new关键字进行对象构造。
2)使用J2EE的service-Location解决直接的依赖耦合关系。
spring Ioc的注入方法:
1)构造方法注入:在被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让外部IoC容器知道它需要依赖哪些对象。
2) setter 方法注入: 当前对象只要为其依赖对象所对应的属性添加setter方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。
3)接口注入:被注入对象如果想要IoC为其注入对象,就必须实现某个接口,这个接口提供一个方法,用来为其注入依赖对象。
三种注入方法的比较:
1)接口注入:不提倡,因为它强制被注入的对象实现不必要的接口,导游侵入性。
2)构造方法注入:优点:对象构造完成之后,即进入就绪状态,可以马上使用。
缺点:当依赖对象比较多的时候,构造方法的参数列表会比较长,通过反射构造对象时,对相同类型的参数的处理比较困难,维护和使用也比较麻烦。
3)setter方法注入:由于方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。
综上所述构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式,而接口注入因为侵入性较强,不提倡使用。
IoC优点:
不会对业务对象构成很强的侵入性,使用IoC之后,对象具有更好的客车实行,可重用性和可扩展性。
IoC Service Provider 对象管理:
需要解决的问题:知道自己说管理和掌握的被注入对象和依赖对象之间的对应关系。
IoC产品使用注册对象管理信息的方法如下:
1)直接编码方式:spring,PicoContainer,Aralon都支持这种方式,在容器启动之前,我们就可以通过程序编码将被注入对象注册到容器中,并明确它们相互之间的依赖关系。
2)配置文件方式:最为常见的是以xml文件来管理对象注册和对象间依赖关系,Spring IoC容器和PicoContainer都是采用这种方式。
3)元数据方式:使用java5和Guice框架实现的,直接在类中使用元数据信息来标注各个对象之间的依赖关系,然后由Guice框架根据这些注解所提供信息将这些对象组装后,交给客户端对象使用。