一个故事带你理解spring的核心

2022-03-23  本文已影响0人  生不悔改

说明

本文只是用一个形象的案例,带你快速去理解spring的核心,spring是一个很优秀的java框架,它的设计思路很巧妙,实现步骤里面留了很多扩展点,我只能站在我目前的对它的使用和理简单讲解一下,具体的细节还是需要不断的翻看源码,去深入理解和学习的。

场景

现实中的工厂我们都知道。工厂是用来生产产品的,但是工厂不会无缘无故的去生产产品,它需要有订单,它才会去按照订单,生产产品,然后将生产好的产品放到仓库中,这时候,如果有客人的订单需要定制,那工厂需要看定制需求是在生产产品前做定制,还是在生产产品后做定制。例如:生产一瓶酒,我们会用统一的用纸去包装这瓶酒,客人说我要定制成木箱子装这瓶酒,那么工厂生产酒的流程不变,只是在最后包装酒的时候去换成木箱子装这瓶酒。
最后生产好的产品,我们会统一放进仓库,然后等待客户来取这些产品。
好了场景说完了,貌似和spring没有任何关联,其实从思想上,流程上,spring就和这个工厂生产产品的流程一样。

关联

介绍几个spring和现实工厂之间流程上面的联系。

工厂在生产产品前,需要拿到产品的订单

spring启动,会从xml配置文件中,或者从扫描包中拿到需要加载到IOC容器中Bean信息。

这些订单信息不一样,五花八门的

spring拿到的Bean信息也是五花八门的,所以统一用BeanDefinition去记录需要生产的Bean的信息,一个bean对应一个BeanDefinition

现在工厂不管生产什么产品,都要检查一下订单交货的时间,等等其他手续

spring中BeanDefinition都要在生产Bean之前执行BeanFactoryPostProcessor子类的postProcessBeanFactory()方法

如果此刻用户说我要改我当前订单的信息,比如产品数量,产品大小等等

类似于我们自己实现BeanFactoryPostProcessor接口,实现当中的postProcessBeanFactory()方法,修改定制化BeanDefinition,或者做其他操作,从而满足我们的要求

此时我们需要整理好所有的订单,开始准备生产产品了

spring开始整合BeanDefinition,将各种BeanDefinition里面的Bean信息整合起来

然后工厂开始根据订单信息生产产品

spring开始拿整合后的BeanDefinition利用反射去初始化,实例化Bean对象

产品生产出来之后会放到仓库中,等待客户来拿

spring会将生产出来的Bean对象统一放在一个ConcurrentHashMap中,等需要使用某个Bean对象,直接去这个Map中获取

上一篇 下一篇

猜你喜欢

热点阅读