工欲善其事,必先利其器。
—— 《论语·卫灵公》
本文将开始介绍refresh()方法。
public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
this();
register(annotatedClasses);
//本节分析的步骤
refresh();
}
refresh()方法去掉catch块后的代码如下:
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// 为刷新容器前做准备,没什么干货,略过。
prepareRefresh();
// 简单理解为获得bean工厂DefaultListableBeanFactory对象即可。
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// 为bean工厂加装一些设备,使其在后续繁杂的bean制造过程中能游刃有余
prepareBeanFactory(beanFactory);
try {
// 空壳方法,为以后Spring扩展预留,略过
postProcessBeanFactory(beanFactory);
// 对BeanFactoryPostProcess