spring IOC使应用中依赖管理变得简单,所以的bean创建,以及当前bean所需要的另外类的实例都由容器来管理。

  想像下,如果不用spring ioc。有业务类A,需要业务类B的实例。而业务类B需要业务类C的实例。这里如果业务类A为入口main方法,我们需要进行以下几个步聚完成A类的实例化:

  1.手动创建C类实例

  2.然后创建B类实例并将之前创建的C类实例插入到B的字段中

  3.最后创建A的实例,并将B的实例插入到A类的字段中

  可以想像实例化,并管理这些依赖的过程对于程序员来说,简直是灾难。如果后续C类又需要D类的字段,又需要改动这段初始化代码。

  基于以上原因,我们想像下,这部分实例化及依赖管理能够由第三方管器来做,而程序员只需关心业务逻辑。

  我们希望,第三方容器的引入对现有项目代码应该影响很小,因此可以考虑用专门的配置文件来做。这样对原有类没有任何侵入。

 spring容器就是基于这样一目标而设计的。

  spring有许多款容器供用户选择,如ApplicationContext,ClassPathXMLApplicationContext等。

  spring 设计容器时,定义了一个beanFactory接口,定义了最常用的几个操作:getBean,containsBean,getType等。

  而基于这个beanFactory,在设计实现时,原则上重用一些代码,这个可以用继承与组合。spring中,用继承来复用大量的代码。

  beanFactory继承体系如下,此处只研究XmlBeanFactory这个分支:

   beanFactory->AutowireCapableBeanFactory->AbstractAutowireCapableBeanFactory->DefaultListableBeanFactory->XmlBeanFactory


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐