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. <bean id="Michelin" class="com.xservice.h3c.spring.chapter03.Michelin">
  10. </bean>
  11. <bean id="China" class="com.xservice.h3c.spring.chapter03.China">
  12. </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. private Person person;
  3. private Wheel wheel;
  4. @Inject
  5. public Car(Person person, Wheel wheel) {
  6. this.person = person;
  7. this.wheel = wheel;
  8. }
  9. }

通过注解@Inject,指明需要IoC Service Provider通过构造方法注入。这里是为Car注入其所依赖的对象。其它的依赖相关信息,由Module提供,如下:

[java] view plain copy
  1. public class CarBindingModule extends AbstractModule {
  2. protected void configure() {
  3. bind(Person.class)
  4. .to(China.class).in(Scopes.SINGLETON);
  5. bind(Wheel.class)
  6. .to(Michelin.class).in(Scopes.SINGLETON);
  7. }
  8. }

然后我们可以使用了:

[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容器。

掌管大局的IoC Service Provider相关推荐

  1. 服务提供者框架(Service Provider Framework)

    服务提供者框架是指:多个服务提供者实现一个服务,系统为客户提供多个实现, 并把它们从多个实现中解耦出来.服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性.如JDBC,JMS等就是服务提 ...

  2. Introduction to the Service Provider Interfaces--官方文档

    地址:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html What Are Services? Services are unit ...

  3. angularjs 中 Factory,Service,Provider 之间的区别

    本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行 ...

  4. java provider_Java SPI(Service Provider Interface)

    //ServiceLoader实现了Iterable接口,可以遍历所有的服务实现者 public final class ServiceLoader implements Iterable{//查找配 ...

  5. Java中的SPI(Service Provider Interface介绍及示例

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一个服务 ...

  6. Java基础学习总结(145)——Java SPI(Service Provider Interface)简介

    SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.一个服务(Service)通常指的是已知的接口或者抽象类,服务提供方就是对 ...

  7. smallworld 下的magik module 的logger和service provider

    最近一直在研究gis方法的技术,研究最多的就是smallworld,对于smallworld的研究了1个月 有点心得就发上来给大家分享一下. 刚进来这个领域的时候知道 arcgis用的是比较多的,但我 ...

  8. LSP(Layered Service Provider)入门的基础知识概念

    1.套接字 TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口. 套接字用(IP地址:端口号)表示. 它是网络通信过程中端点的抽象表示,包含进行网 ...

  9. 如何删除 MOSS 共享服务提供程序 (SSP, Shared Service Provider)

    在 MOSS 2007 管理中心站点找了半天也没有发现一个可以删除 SSP 的入口,难道不能删除?google 到这里 How to delete a default SSP (Shared Serv ...

  10. Laravel Service Provider 概念详解

    https://learnku.com/articles/6189/laravel-service-provider-detailed-concept-收藏一下 我们知道, Container 有很多 ...

最新文章

  1. 语音合成android代码,百度 TTS 语音合成-Android
  2. 重大事故!线上系统频繁卡死,凶手竟然是 Full GC ?
  3. golang的makefile编写
  4. 腾讯产品经理告诉你微信为什么没有用户等级?
  5. 傅里叶变换音频可视化_Web Audio在音频可视化中的应用
  6. 详解京东商城智能对话系统(生成+检索)
  7. 记录一下pom文件scope各种配置所作的行为
  8. HDU - 6746 Civilization(贪心+模拟)
  9. 腾讯iOA零信任安全——IT变革下的新一代企业网
  10. Array with Odd Sum CodeForces - 1296A
  11. python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承
  12. full stack front end
  13. MarkDown(七)——LaTeX数学公式符号标记
  14. c语言杭电oj1090答案,杭电OJ水题答案.doc
  15. 计算机按电源键无法反应,电脑无法开机怎么办 按电脑开机键也没反应的原因及处理解决办法...
  16. 小米 无线 linux 鼠标,便捷好用的小米无线鼠标,据说用完一键退回就离不开了...
  17. 云MAS - MT-提交状态码
  18. 河南省第二类医疗器械首次注册
  19. 蒲公英内测托管:从隐私合规开始,让我们的数据安全流通
  20. 图片怎么做雕刻路径_迷你字雕刻路径怎么做

热门文章

  1. macOS 升级12.0.1后,virtualBox 报错 Kernel driver not installed
  2. FL Studio中钢琴卷帘窗的工具的使用
  3. springboot+shiro+cas实现单点登录之cas server搭建
  4. nginx打开Last_modified
  5. Hive几种导出数据方式
  6. 一个类似百度的搜索。。。。。
  7. 关于自定义任务(Tasks)的心得(转载)
  8. Wattagio for Mac(电池管理) 免激活版
  9. 在桌面养只捣蛋鹅,让 Desktop Goose 陪你一起用Mac
  10. 如何在 Mac 上发布警报?