老生谈spring(二):初步了解ClassPathXmlApplicationContext
1、在上一节中讲到启动容器的主要代码就是context.refresh();现在带大家认识这个refresh方法。
2、点进这个方法你会发现,refresh是父类AbstractApplicationContext的方法,它采用了模板的设计模式,定义了一套spring容器启动时的抽象方法以及调用顺序。我们先不关心其他的,就只看obtainFreshBeanFactory方法。
@Override
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
prepareRefresh();
// 本节重点,obtainFreshBeanFactory方法创建BeanFactory容器
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
prepareBeanFactory(beanFactory);
try {
postProcessBeanFactory(beanFactory);
invokeBeanFactoryPostProcessors(beanFactory);
registerBeanPostProcessors(beanFactory);
initMessageSource();
initApplicationEventMulticaster();