Spring源码版本:4.3.23.RELEASE
一、加载过程概览
Spring容器加载过程可以在org.springframework.context.support.AbstractApplicationContext#refresh方法看到总体过程,具体细节需要断点调试:
1 @Override 2 public void refresh() throws BeansException, IllegalStateException { 3 synchronized (this.startupShutdownMonitor) { 4 // Prepare this context for refreshing. 5 prepareRefresh(); 6 7 // Tell the subclass to refresh the internal bean factory. 8 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 9 10 // Prepare the bean factory for use in this context.11 prepareBeanFactory(beanFactory);12 13 try {14 // Allows post-processing of the bean factory in context subclasses.15 postProcessBeanFactory(beanFactory);16 17 // Invoke factory processors registered as beans in the context.18 invokeBeanFactoryPostProcessors(beanFactory);19 20 // Register bean processors that intercept bean creation.21 registerBeanPostProcessors(beanFactory);22 23 // Initialize message source for this context.24 initMessageSource();25 26 // Initialize event multicaster for this context.27 initApplicationEventMulticaster();28 29 // Initialize other special beans in specific context subclasses.30 onRefresh();31 32 // Check for listener beans and register them.33 registerListeners();34 35 // Instantiate all remaining (non-lazy-init) singletons.36 finishBeanFactoryInitialization(beanFactory);37 38 // Last step: publish corresponding event.39 finishRefresh();40 }41 42 catch (BeansException ex) {43 if (logger.isWarnEnabled()) {44 logger.warn("Exception encountered during context initialization - " +45 "cancelling refresh attempt: " + ex);46 }47 48 // Destroy already created singletons to avoid dangling resources.49 destroyBeans();50 51 // Reset 'active' flag.52 cancelRefresh(ex);53 54 // Propagate exception to caller.55 throw ex;56 }57 58 finally {59 // Reset common introspection caches in Spring's core, since we60 // might not ever need metadata for singleton beans anymore...61 resetCommonCaches();62 }63 }64 }
后续文章根据以上标出来的每一个加载步骤进行解析。