汽车类比

汽车的生产流程大概是这样的,在生产汽车之前先有汽车的图纸,再根据图纸把各个零件组装成汽车,然后把组装完的汽车发往各地的进行贩卖。
小时打算买辆大指挥官,然后就去4s店问,人家说还没造出来呢,得先等造出来。我问他图纸有了吗,他们说有了,正在组装呢,那我就先等着吧。
其实spring的bean加载过程跟汽车的工厂差不多。
我们根据汽车,看spring的bean加载的流程,其中有几个关键词,图纸,组装,存储。

图纸的数字化

图纸,这个图纸就相当于咱们的xml文件,汽车的图纸里边有各个零件的参数,比如发动机是什么样的,spring的图纸里边的则是标签, 等标签的配置。一张图纸用起来不方便,能不能把图纸进行数字化的管理并存储起来呢,当然是可以的,那就定义一个图纸存储的规范吧,spring就定义的存储的规范就是BeanDefinition,图纸的类型有很多,为了将图纸转化为数字化的规范得需要一些工具,为这些工具也定义一些规范吧,这些规范就是BeanDefinitionParser。那数字化的内容存在哪里呢,的有个存储的地方吧,这个地方就是BeanDefinitionRegistry,以后直接从BeanDefinitionRegistry中取岂不是很方便。
这个流程相对于BeanDefinition的解析流程。

汽车的生产

小时现在要买一辆车(获取一个bean对象),工作人员问我想买什么样的车,先去工厂里瞅瞅,这个工厂就是spring的BeanFactory了,我说想去看看汽车是怎么造出来的个,工作人员说既然想来,那就带你看看吧。
我跟他说我是来买车的不是来租车的,给我一辆永久的就可以,他先到factoryBeanObjectCache中帮我看了看,说我的车没有库存,那就的先造车。
他从BeanDefinitionRegistry中找出了我的车的BeanDefinition,看了看这辆车是否是代工(代理),如果是的话就让代工来做,不是的话就自己做了。他们做的挺先进的,找了一个机器人BeanWrapper,用机器根据BeanDefinition的属性进行装配,如果有的零件(BeanDefinition相应的属性)没有的话就先把相应的零件造出来,一会就把车造出来了。