进入
AbstractApplication
的 obtainFreshBeanFactory 方法:
用于创建一个新的 IoC容器 ,这个 IoC容器 就是
DefaultListableBeanFactory
对象。
进入
AbstractRefreshableApplicationContext
的 refreshBeanFactory 方法:
销毁以前的容器
创建新的 IoC容器
加载 BeanDefinition 对象注册到IoC容器中
进入
AbstractRefreshableApplicationContext
的 createBeanFactory 方法
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {
// 主要是通过该方法完成IoC容器的刷新
refreshBeanFactory();
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (logger.isDebugEnabled()) {
logger.debug("Bean factory for " + getDisplayName() + ": " +
beanFactory);
}
return beanFactory;
}
1
2
3
4
5
6
7
8
9
10
protected final void refreshBeanFactory() throws BeansException {
// 如果之前有IoC容器,则销毁
if (hasBeanFactory()) {
destroyBeans();
closeBeanFactory();
}
try {
// 创建IoC容器,也就是DefaultListableBeanFactory
DefaultListableBeanFactory beanFactory = createBeanFactory();
beanFactory.setSerializationId(getId());
customizeBeanFactory(beanFactory);
// 加载BeanDefinition对象,并注册到IoC容器中(重点)
loadBeanDefinitions(beanFactory);
synchronized (this.beanFactoryMonitor) {
this.beanFactory = beanFactory;
}
}
catch (IOException ex) {
throw new ApplicationContextException("I/O error parsing bean
definition source for " + getDisplayName(), ex);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected DefaultListableBeanFactory createBeanFactory() {
return new
DefaultListableBeanFactory(getInternalParentBeanFactory());
}
1
2
3
4
评论0