说明
本文只是用一个形象的案例,带你快速去理解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中获取
网友评论