老生谈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();
onR

本文探讨了Spring容器启动时的核心方法refresh(),详细解析了从AbstractApplicationContext到AbstractRefreshableApplicationContext,再到ClassPathXmlApplicationContext的调用链路。通过分析,读者可以了解到在调用context.refresh()时,如何初始化beanfactory容器,以及bean定义的加载过程。后续章节将重点讲解XML解析细节。
最低0.47元/天 解锁文章
567

被折叠的 条评论
为什么被折叠?



