Spring框架——简单了解IoC Service Provider

13 篇文章 0 订阅
5 篇文章 0 订阅

目录

1.IoC Service Provider的职责

定义

职责

2.IoC Service Provider如何管理对象之间的依赖注入关系

三种IoC Service Provider使用的注册对象管理信息的方式


1.IoC Service Provider的职责

定义

        IoC Service Provider在这里是一个抽象的概念,他可以指代任何将IoC场景中的业务对象绑定到一起的实现方式。

        我们在学习spring框架的ioc容器时可以明显的感受到,我们需要将手动配置在xml配置文件中的依赖对象赋值给业务所需要的对象。比如使用ApplicationContext的getBean方法进行容器对象与需求变量之间的绑定,或者使用注解的形式自动进行绑定,而这些绑定的幕后主使也就是我们今天所说的IoC Service Provider。

职责

        1.业务对象的构建管理:业务对象如何构建我们不需要关注,但是构建对象这一步一定需要一个操作者,所以IoC Service Provider需要将对象的构建逻辑从客户端对象那里剥离出来,以免这部分逻辑污染业务对象的实现。简单的说就是不在某个类中直接创建对象,而是将创建对象的过程剥离出来。

        客户端对象:客户端字面的意思就是客户,客户需要服务,所以客户端对象的意思就是如果A类调用B类,那么A类就是B类的客户端对象。

        2.业务对象间的依赖绑定:对于IoC Service Provider来说这是他的核心职责完成对象之间的联系。如果IoC Service Provider没有这个职责,那么配置在容器中的对象根本无法被使用,就像是风筝断了线,任凭程序如何寻找都找不到,但是对象始终就在容器中。IoC Service Provider通过结合之前构建和管理的所有业务对象,以及各个业务对象间可以识别的依赖关系,将这些对象所依赖的对象注入绑定,从而保证每个业务对象都在使用的时候,就已经处于就绪的状态(非空)。

        比如我们在IoC容器中注册了一个对象User,那么我们需要User对象时,User类就是可以识别的依赖关系,那么IoC Service Provider就可以将其填充到我们需要的变量中。

2.IoC Service Provider如何管理对象之间的依赖注入关系

        学习完IoC Service Provider的职责2后,我们发现IoC Service Provider是可以完成业务对象之间的绑定的,但是需要可以识别的依赖关系信息, 比如我们使用Service实现类的方法解决问题时,我们需要的是UserService的方法,但是最终注入的却是AdminService对象。所以问题来了:接收到注入对象通知的IoC Service Provider是否就一定能够完全领会被注入对象的意图,并及时有效地为其提供想要的依赖呢?实际上是不行的。

三种IoC Service Provider使用的注册对象管理信息的方式

        1.直接编码:当前大部分IoC容器都应该支持直接编码的方式,比如PicoContainer,Spring,Avalon等。在容器启动之前,我们就可以通过程序编码的方式将被注入对象依赖对象注册到容器中。将对象通过代码的形式直接注册到IoC容器中,需要时通过IoC封装好的方法传入通过Class类直接获取。

//初始化ioc容器
IoContainer container = ...
//注册绑定被注入对象和依赖对象之间的关系
container.register(被注入对象1.class,new 依赖对象1);
container.register(被注入对象2.class,new 依赖对象3);
...
//不使用伪代码
container.register(UserService.class,new UserService);
container.register(BaseService.class,new UserService);
...

//使用对象
BaseService bs = (BaseService)container.get(BaseService.class);
bs.方法();

        2.配置文件:这是一种较为普遍的依赖注入关系管理方式。像普通文本文件,xml配置文件,properties配置文件等,都是比较常用的管理依赖注入的方式。最为常见的还是xml配置文件的方式。比如我们所熟知的SpringIoC容器,这个我们就不多介绍了

        3.元数据:这种方式的代表实现是Google Guice,这是基于java5注解以及Generic开发的一套IoC框架。元数据方式其实就是我们最常用的注解的形式,实现的思想就是在类中使用带有标识型的注解来标注各个对象之间的依赖关系,然后框架在通过解析注解所提供的信息完成对象的被注入对象以及依赖对象的组装,然后交给客户端对象来使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aristocrat l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值