Spring 源码深度解析(第 2 版)读书笔记(五)ApplicationContext下的加载过程
之前学习了BeanFactoy的创建过程和Bean的生命周期之后,这次将看看平时经常使用ApplicationContext和BeanFactory是什么关系。
从new一个ApplicationContext开始
进入的第一个方法看看:
进入第二方法,也是最重要的一个方法,这个方法中有十二个方法,描述着整个ApplicationContext的加载过程。
然后我们一个一个进去看看,容器刷新过程,都做了哪些工作
第一个:prepareRefresh
第二个方法:ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
第三个方法:prepareBeanFactory(beanFactory);
第四个方法:postProcessBeanFactory(beanFactory);
第五个方法:invokeBeanFactoryPostProcessors(beanFactory);
第六个方法:registerBeanPostProcessors(beanFactory);
第七个方法:initMessageSource();
第八个方法:initApplicationEventMulticaster();
第九个方法:onRefresh();
第十个方法:registerListeners();
第十一个方法:finishBeanFactoryInitialization(beanFactory);
进入下一层
第十二个方法:finishRefresh();
到这里,ApplicationContext的创建过程,也就看完了,在有着对BeanFactory和Bean生命周期的了解的前提下,看容器刷新过程还是比较轻松的,虽然一些部分没搞懂,有可能是自身对于spring的使用还不够深入导致的。
在ApplicationContext中,我们可以看到,ApplicationContext其实就是对BeanFactory的一种功能扩展,以具备Bean的管理的基础上,进一步做了延伸,在里面可以发现,对于BeanFactoryPostProcessor和BeanPostProcessor,我们平时使用的注解的实现,最后很多都是由它们来实现的。
功力尚浅,它们两个的作用应该不止于此,下一步继续探索。