掌管大局的IoC Service Provider


http://blog.csdn.net/tc2015/article/details/52326112

IoC Service Provider :提供依赖注入服务

3.1 IoC Service Provider的职责

业务对象的构建管理:将对象构建逻辑从客户端对象剥离出来,以免这部分逻辑污染业务对象的实现。

业务对象间的依赖绑定( IoC Service Provider的最终使命):将对象所依赖的对象注入绑定,从而保证每个业务对象在使用的时候,可以处于就绪状态。

3.2 运筹帷幄的秘密—— IoC Service Provider如何管理对象间的依赖关系

记录对象之间关系的方式:

通过最基本的文本文件来记录被注入对象和依赖对象之间对应关系

通过描述性较强的XML文件格式来记录对应关系

通过编写代码的方式来注册这些对应的信息

甚至,你可以用语音方式来记录对象间的依赖注入关系(我的脑洞突然就大开了。。)

下面会讲到现实中注册对象管理信息的方式:

3.2.1 直接编码方式

大部分的IoC容器都支持直接编码方式,比如PicoContainer、Spring、Avalon等。在容器启动之前,我们就可以通过程序编码的方式将被注入对象和依赖对象注册到容器中,并明确她们相互之间的依赖的注入关系。

代码有IoContainer,这类我也没找到,忽略过去 了。。后面会讲到!

3.2.2 配置文件方式

这是一种较为普遍的依赖注入关系管理方式。(普通文本文件、properties文件、XML文件等)。当然最为常见的是XMl文件

Spring配置方文件:

[html]  view plain  copy
  1. <bean id="car" class="com.xservice.h3c.spring.chapter03.Car">  
  2.     <property name="wheel">  
  3.         <ref bean="Michelin" />  
  4.     </property>  
  5.     <property name="person">  
  6.         <ref bean="China" />  
  7.     </property>  
  8. </bean>  
  9.   
  10. <bean id="Michelin" class="com.xservice.h3c.spring.chapter03.Michelin">  
  11. </bean>  
  12. <bean id="China" class="com.xservice.h3c.spring.chapter03.China">  
  13. </bean>  
然后可以使用:

[java]  view plain  copy
  1. container.readConfigurationFiles(...);  
  2. Car car = container.getBean("car");  
  3. car.drive();  

3.2.3 元数据方式

书上提到了 google guice(一种DI框架)

[java]  view plain  copy
  1. public class Car {  
  2.   
  3.     private Person person;  
  4.   
  5.     private Wheel wheel;  
  6.   
  7.     @Inject  
  8.     public Car(Person person, Wheel wheel) {  
  9.         this.person = person;  
  10.         this.wheel = wheel;  
  11.     }  
  12.   
  13. }  
通过注解@Inject,指明需要IoC Service Provider通过构造方法注入。这里是为Car注入其所依赖的对象。其它的依赖相关信息,由Module提供,如下:

[java]  view plain  copy
  1. public class CarBindingModule extends AbstractModule {  
  2.   
  3.     protected void configure() {  
  4.         bind(Person.class)  
  5.                 .to(China.class).in(Scopes.SINGLETON);  
  6.         bind(Wheel.class)  
  7.                 .to(Michelin.class).in(Scopes.SINGLETON);  
  8.     }  
  9.   
  10. }  
然后我们可以使用了:

[java]  view plain  copy
  1. public static void main(String[] args) {  
  2.     Injector injector = Guice.createInjector(new CarBindingModule());  
  3.     Car car = injector.getInstance(Car.class);  
  4.     car.drive();  
  5. }  

3.3 小结

讨论了IoC Service Provider的基本职责,以及它常用的几种依赖关系管理方式。Ioc Service Provider 只是为了简化概念而提出的一个一般性的概念。 下一章, 将由一般到特殊, 一起深入了解Spring提供的IoC容器。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值