《spring設計思想》18-bean知識總結

現在spring中的bean來源主要有兩個:

一個是掃描資源文件xml/properties等加載BeanDefinition

二是掃描Annotation標註的Class文件加載BeanDefinition

不管是哪一種,我們都知道讀取資源文件加載到BeanFactory中的都是BeanDefinition(針對普通的Bean)

在我們需要使用的Bean的時候,再調用getBean方法獲取Bean。

如果是第一次的話會調用createBean方法,創建Bean的實例。如果是多次調用getBean的時候,會優先查找緩存裏面的實例

創建bean的過程在前面的幾節一起梳理過,現在我們來總結一下

首先是BeanDefinition階段:

1-需要mergeBeanDefinition

2-resovleBeanClass,把BeanDefinition中的beanClass從String轉化爲Class

3-調用postProcessBeforeInstantiation方法,攔截bean的實例化  (InstantiationAwareBeanPostProcessor)

4-使用反射,實例化bean

5-調用postProcessAfterInstantiation方法,攔截bean實例化(InstantiationAwareBeanPostProcessor)

6-調用postProcessProperties方法,攔截bean的屬性注入 (InstantiationAwareBeanPostProcessor)

7-調用applyPropertyValues,把bean的配置屬性注入到bean中

8-進入bean的初始化過程,invokeAwareMethod,調用bean自己實現的Aware方法

9-applyBeanPostProcessBeforeInitialization,攔截bean的初始化

10-invokeInitMethod,調用bean自己定義的初始化方法

11-applyBeanpostProcessAfterInitialization,攔截bean的初始化

這樣之後,整個createBean過程就完成了,這個時候獲取的bean,會放入beanFactory的緩存中,下次訪問會優先訪問緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章