天天看點

Spring容器加載bean的過程(學習筆記)

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