在spring實體化 之前bean物件封裝成 beanDefinition 物件 想了解詳情的請參考上一篇文章
好了 我們聊聊 Bean 的實體化程序的幾個重要角色 BeanDefinitionRegistryPostProcessor 介面 Refresh().invokeBeanFactoryPostProcessors 這個方法里面, BeanDefinitionRegistryPostProcessor 這個介面的呼叫分為三部: 1、呼叫實作了 PriorityOrdered 排序介面 2、呼叫實作了 Ordered 排序介面 3、沒有實作介面的呼叫 這個介面我的理解:獲取 BeanDefinitionRegistry 物件,獲取到這個物件就可以獲取這個物件中注冊的 所有 BeanDefinition 物件,所以我們知道了,我們擁有這個物件就可以完成里面所有 BeanDefinition 對 象的修改新增操作
BeanPostProcessor 的注冊 Refresh().registerBeanPostProcessors 這個方法里面,
拿到 BeanFactory 中所有注冊的 BeanDefinition 物件的名稱 beanName,
然后判斷是否實作了 PriorityOrdered 排序介面,Ordered 排序介面,getBean 是將
該 ppName 對應的 BeanDefinition 物件實體化,
把對應的 BeanPostProcessor 物件注冊到 BeanFactory 中,BeanFactory 中有一個
list 容器接收,
getSingleton 方法
代碼位置:
AbstractBeanFactory.doGetBean 方法中
方法里面核心要點:

調到 getObject 方法,完成 bean 的實體化,接下來
getObject 呼叫完后,就代表著 Bean 實體化已經完成了,這時候就需要 1、singletonsCurrentlyInCreation 把 beanName 從這個集合中洗掉 2、addSingleton,把 bean 快取到一級快取中
createBean 方法
代碼位置:
AbstractBeanFactory.doGetBean 方法中
這個方法是 bean 實體化核心方法

實體化方法,把 bean 實體化,并且包裝成 BeanWrapper 點進這個方法里面,
這個方法是反射呼叫類中的 factoryMethod 方法,這要知道@Bean 方法的原理,實際上 spring 會掃描有@bean 注解的方法,然后把方法名稱設定到 BeanDefinition 的 factoryMethod 屬性中,接下來就會調到上面截圖中的方法實作@Bean 方法的呼叫,該方法里面的引數解 析程序不需要了解,
determineConstructorsFromBeanPostProcessors 這個方法是 BeanPostProcessor 介面類的首次應用,最侄訓掉到 AutowiredAnnotationBeanPostProcessor 類的方法,在方法中會掃描有注解的建構式然后完 成裝配程序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/22648.html
標籤:架構設計
