【深山老林Spring】BeanDefinition深入分析(RootBeanDefinition、ChildBeanDefinition...)

Bean的定义信息是Spring容器的一个核心概念,本文就深入分析一下BeanDefinition这个接口(类)。

Spring容器启动的过程中,会将Bean解析成Spring内部的BeanDefinition结构

不管是是通过xml配置文件的<Bean>标签,还是通过注解配置的@Bean,它最终都会被解析成一个Bean定义信息(对象),最后我们的Bean工厂就会根据这份Bean的定义信息,对bean进行实例化、初始化等等操作。

从上可知BeanDefinition这个接口对Spring IoC容器的重要之处,所以了解好了它(以及子类),能让我们更大视野的来看Spring管理Bean的一个过程,也能透过现象看本质。

下面用一个非常形象的比喻,来形容Spring IoC容器和BeanDefinition之前的关系。

比喻:BeanFactory和BeanDefinition

Spring IoC容器比作一间餐馆,当你来到餐馆,通常会直接招呼服务员:点菜!至于菜的原料是什么?如何用原料把菜做出来?可能你根本就不关心。

IoC容器也是一样,你只需要告诉它需要某个bean,它就把对应的实例(instance)扔给你,至于这个bean是否依赖其他组件,怎样完成它的初始化,根本就不需要你关心。

那么问题来了,作为餐馆,想要做出菜肴,得知道菜的原料和菜谱。同样地,IoC容器想要管理各个业务对象以及它们之间的依赖关系,需要通过某种途径来记录和管理这些信息。 BeanDefinition对象就承担了这个责任。

容器中的每一个bean都会有一个对应的BeanDefinition实例,该实例负责保存bean对象的 所有 必要信息,包括bean对象的class类型、是否是抽象类、构造方法和参数、其它属性等等(所以BeanDefinition就好比做菜的原料)。

 

上一篇:【架构师面试-Java编程基本功-13】-Spring 之依赖注入


下一篇:撸了谷歌内部写的Spring源码笔记后,感觉之前读的都是ZZ