1. 程式人生 > >Spring架構詳解之BeanFactory的建立-上

Spring架構詳解之BeanFactory的建立-上

下面是更新BeanFactory的方法程式碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 protected final void refreshBeanFactory() throws BeansException {    if (hasBeanFactory()) {    destroyBeans();    closeBeanFactory();   
try DefaultListableBeanFactory beanFactory = createBeanFactory();  beanFactory.setSerializationId(getId());  customizeBeanFactory(beanFactory);  loadBeanDefinitions(beanFactory);  synchronized (this.beanFactoryMonitor) {  this.beanFactory = beanFactory;    catch
(IOException ex) {    throw new ApplicationContextException(    "I/O error&  nbsp;parsing bean definition source for "  + getDisplayName  (), ex);  }

這個方法實現了AbstractApplicationContext的抽象方法refreshBeanFactory,這段程式碼清楚的說明了BeanFactory的建立過程。注意BeanFactory物件的型別的變化,前面介紹了他有很多子類,在什麼情況下使用不同的子類這非常關鍵。BeanFactory的原始物件是DefaultListableBeanFactory,這個非常關鍵,因為他設計到後面對這個物件的多種操作,下面看一下這個類的繼承層次類圖:

DefaultListableBeanFactory類繼承關係圖 DefaultListableBeanFactory類繼承關係圖

從這個圖中發現除了BeanFactory相關的類外,還發現了與Bean的register相關。這在refreshBeanFactory方法中有一行loadBeanDefinitions(beanFactory)將找到答案,這個方法將開始載入、解析 Bean的定義,也就是把使用者定義的資料結構轉化為Ioc容器中的特定資料結構。

這個過程可以用下面時序圖解釋:

建立BeanFactory時序圖 建立BeanFactory時序圖