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 方法中,這也是一個很重要的方法