Spring之IOC、核心容器和Bean概念详解

    这一周忙了很多与代码无关的事,感觉心态上还是有些急躁,周中挑几个晚上看了一些文章,上午起来总结了一下,下午开始写博客,因为没有时间撸代码,所以就打算先把看到的概念梳理梳理,磨刀不误砍柴工。

    首先来看一看什么是IOC,他的全称是Inversion of Control,即控制反转,如果上网找绝大多数的概念是这样说的:Spring实现了把原始的通过代码操纵的组件和应用的调用权利交给了容器,由容器去进行组件代码的控制和管理,反转也就是把组件代码的控制权由外部代码转移到了内部容器。

    可是光这么说还是有一些抽象,本着知乎上先问是什么再问是不是的原则,我们把这个问题拆解开来看,首先梳理出来参与者,一般会有三个参与者,一个是应用对象,一个是IOC容器,一个是该对象所依赖(或所使用)的另一个对象。应用对象很好理解,就是一个单纯的Java对象,IOC容器简单理解就是Spring实现IOC的一套框架程序,所依赖对象就是这个对象实现过程中需要依赖的某个外部程序。

    梳理明白了这个参与者的问题,下面解释什么是控制反转,控制,即对应用对象的控制权,反转,就意味着对象的初始化等一系列工作不再需要我们在外部完成,而是全部交给容器这个框架程序,我们只是被动地等待,所以被反转了,那么这么做有什么好处呢?事实上使用Spring配置文件来管理对象,可以大幅度减少代码间的耦合,不必在上层类调用下层类的时候进行下层类的初始化。这里再提到另外一个概念,就是依赖注入(DependencyInjection),其实就我的理解,依赖注入和控制反转说的是一回事,控制反转是结果,实现这个结果的过程(或者叫方法)是依赖注入,也就是反转的过程是通过把应用程序注入到容器中所实现的,而这里的依赖是指应用程序的工作要依赖容器去完成,因为容器控制着应用程序所依赖的外部对象。

    或者还可以这么说,依赖注入和控制反转其实是表述的对象不同,依赖注入是从应用程序的角度来说的,应用程序需要将原始的,对象的创建过程交给容器去做,应用程序中对象的创建就依赖容器去完成,而容器创建这个对象使用的就是注入的方式,比如set注入或者是构造注入什么的而控制反转是从容器的角度去说的,容器将之前手动在程序里去创建的对象反转为由容器自己去创建,所以叫控制反转。


    说了这么久的容器,那么容器到底是什么呢,上文说了可以把容器理解为一个实现控制反转的框架程序,那么这个程序是如何实现的,又是如果工作的?

    容器,顾名思义,是承载东西的一个器皿,从程序的角度,可以大致把容器分为两类,一类是web容器,就是一个位于应用程序和平台之间的接口集合,比如Tomcat等,还有一类,就是存储和组织其他对象的对象,比如Java的Map,List类等等,我们可以叫它编程容器。容器可以管理对象的生命周期,对象与对象之间的依赖关系,我们依靠一个XML文件(通常情况下),来配置一个对象的名称,id,产生方式,以及产生后是否作为另一个对象的属性等,而这个对象的初始化,设置依赖关系的过程不用写一行代码,Spring实现了代码间的高度解耦。

    这是Spring的接口设计图,这里我们只关注两条继承路线,一条是从BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,这是一条BeanFactory的设计路线,他规定了IOC容器的规范,首先在BeanFactory接口中定义了类似getBean()等基础的方法,然后在HierarchicalBeanFactory继承了它之后,实现了getParentBeanFactory()方法,使对象具有双亲IOC容器的管理功能,然后在ConfigurableBeanFactory接口中,又实现了setParentBeanFactory功能来设置双亲IOC容器,通过一层层接口的叠加,来实现IOC的基本功能。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值