Spring框架核心源代码的分析及其感受-1
?
public void refresh () throws BeansException, IllegalStateException { synchronized ( this . startupShutdownMonitor ) { // Prepare this context for refreshing. prepareRefresh();?????????? ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();?????????? prepareBeanFactory(beanFactory);???????? try { postProcessBeanFactory(beanFactory);????????????? invokeBeanFactoryPostProcessors(beanFactory);????????????? registerBeanPostProcessors(beanFactory);????????????? initMessageSource();????????????? initApplicationEventMulticaster();????????????? onRefresh();????????????? registerListeners();...
?其实这里是一个初始化ApplicationContext的过程模板(模板设计模式),基类里面的主方法Refresh起到一个流程整合的作用,其调用的方法可能是抽象方法,需要子类去实现的,这样做的好处是,在一固定算法框架下,做到分步实现的解藕,想象一下,每一个分步都是可以被子类替换的,利用模板设计模式把过程也解藕了。
另外,你还可以看到上面有MessageSource,PostProcessor,applicationEvent的内容,熟悉Spring使用的朋友,你应该知道这里是干了什么了,有时间的话,我们就回来分析分析这些方法!不过我们现在先研究一下obtainFreshBeanFactory()