[Spring实战系列](4)Spring IOC容器

IOC(Inversion of Control)控制反转。在Java开发中,IOC意味着控制权的转移,应用程序本身不负责依赖对象的创建和维护。而是由外部容器负责创建和维护。

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是"哪些方面的控制被反转了呢?",经过详细的分析和论证后,得出答案:" 获得依赖对象的过程被反转了"。控制被反转之后, 获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是他给"控制反转"取了一个更合适的名字,叫做"依赖注入"。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中。

  • 控制权的转变IOC意味着控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;现在IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;
  • 何是反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;

我们拿一个现实生活中的例子来说明:
没有房屋地产商的时候,我们结婚需要房子住,怎么办呢?只能去自己盖一个房子。现在情况不同了,有了房屋地产商,我们自己不需要盖房子,只需要房屋地产商盖完房子,交上钱,挑一套自己喜欢的住就可以了。房屋地产商联系了我们与房子之间的关系,相对应的,IOC容器联系了对象与依赖对象之间的关系。

QQ截图20160201112557.png

那具体什么是IOC容器呢?它在Spring框架中到底长什么样?说了这么多,其实对IOC容器的使用者来说,我们常常接触到的 BeanFactory和ApplicationContext都可以看成是容器的具体表现形式。这些就是IOC容器,或者说在Spring中提IOC容器,从实现来说,指的是一个容器系列。这也就是说,我们通常所说的IOC容器,如果深入到Spring的实现去看,会发现IOC容器实际上代表着一系列功能各异的容器产品。只是容器的功能有大有小,有各自的特点。打个比方来说,就像是百货商店里出售的商品,我们举水桶为例子,在商店中出售的水桶有大有小;制作材料也各不相同,有金属的,有塑料的等等,总之是各式各样,但只要能装水,具备水桶的基本特性,那就可以作为水桶来出售来让用户使用。这在Spring中也是一样,它有各式各样的IoC容器的实现供用户选择和使用;使用什么样的容器完全取决于用户的需要,但在使用之前如果能够了解容器的基本情况,那会对容器的使用是非常有帮助的;就像我们在购买商品时进行的对商品的考察和挑选那样。 

从上面叙述中也可以看出,并不存在单一的Spring容器。Spring容器自带了几种 容器实现,可以归纳为两种类型:
  • Bean 工厂(Bean Factory,由org.springframework.beans.factory.BeanFactory 接口定义)是最简单的容器,提供基本的DI 支持;
  • 应用上下文(application由org.springframework.context.ApplicationContext 接口定义);

基于BeanFactory 之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力。 虽然我们可以在Bean 工厂和应用上下文两者之间任选一种,但Bean 工厂对于大多数应用来说往往太低级了,因此应用上下文要比Bean 工厂更受欢迎。我们会把精力集中在应用上下文的使用上,不再浪费时间讨论Bean 工厂。






  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@SmartSi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值