1、我們通過xml或注解或配置編寫代碼方式聲明bean的資訊.
2、Spring都會把他們解析成一個BeanDefinition。每一個Bean對應一個BeanDefinition同時注冊到BeanDefinitionRegistry,抽象類AbstractBeanDefinitionReader根據注冊的BeanDefinitionRegistry得到bean的所有資訊.
3、接着會進入到AbstractApplicationContext 的refresh()方法,這個方法包含了很多重要的方法
4、執行個體化BeanFactoryPostProcessor實作類,執行BeanFactoryPostProcessor的postProcessBeanFactorty方法建立工廠,接下來就是在工廠中執行個體化bean的。
5、在BeanFactory工廠中會執行個體化BeanPostProcessor實作類和InstantiationAwareBeanPostProcessorAdapter實作類。
6、執行InstantiationAwareBeanPostProcessorAdapter的postProcessBeforeInstantoation方法,接着執行bean的構造器
7、執行InstantiationAwareBeanPostProcessorAdapter的postProcessPropertyValues方法,為Bean注入屬性。
8、調用BeanNameAware的setBeanName方法,以及調用BeanFactoryAware的setBeanFactory方法。
9、執行BeanPostProcessor的postProcessBeforeInitialization方法,調用InitializingBean的afterPropertiesSet方法,調用bean的init-method屬性指定的初始化方法。執行BeanPostProcessor的PostProcessAfterInitialization方法
10、容器初始化成,執行正常調用後,下面開始摧毀容器。調用DiposibleBean的destory方法,調用bean的destory-method屬性指定的初始化方法
執行個體化過程是在docreateBean 方法中,這也是一個很重要的方法