Spring源碼分析-IOC容器主要接口設計

在Spring中,這個IOC容器是怎樣設計的呢?我們可以看下圖1所示的IOC容器的接口設計圖,這張圖描述了IOC容器中的主要接口設計。

 

 

下面對接口關係做一些簡要的分析,可以依據以下內容來理解這張接口設計圖。

  • 從接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一條主要的BeanFactory設計路徑。在這條接口設計路徑中,BeanFactory接口定義了基本的IOC容器規範。在這個接口定義中,包括了getBean()這樣的IOC容器的基本方法(通過這個方法可以從容器中取得Bean)。而HierarchicalBeanFactory接口在繼承了BeanFactory的基本接口之後,增加了getParentBeanFactory()的接口功能,使BeanFactory具備了雙親IOC容器的管理功能。在接下來的ConfigurableBeanFactory接口中,主要定義了一些對BeanFactory的配置功能,比如通過setParentBeanFactory()設置雙親IOC容器,通過addBeanPostProcessor()配置Bean後置處理器,等等。通過這些接口設計的疊加,定義了BeanFactory就是簡單IOC容器的基本功能。關於BeanFactory簡單IOC容器的設計,我們會在後續內容中詳細介紹。

  • 第二條接口設計主線是,以ApplicationContext應用上下文接口爲核心的接口設計,這裏涉及的主要接口設計,從BeanFactory到ListableBeanFactory,再到ApplicationContext,再到我們常用的WebApplicationContext或者
    ConfigurableApplicationContext接口。我們常用的應用上下文基本上都是
    ConfigurableApplicationContext或者WebApplicationContext的實現。在這個接口體系中,ListableBeanFactory和HierarchicalBeanFactory兩個接口,連接BeanFactory接口定義和ApplicationContext應用上下文的接口定義。在ListableBeanFactory接口中,細化了許多BeanFactory的接口功能,比如定義了getBeanDefinitionNames()接口方法;對於HierarchicalBeanFactory接口,我們在前文中已經提到過;對於ApplicationContext接口,它通過繼承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory簡單IOC容器的基礎上添加了許多對高級容器的特性的支持。

  • 這裏涉及的是主要接口關係,而具體的IOC容器都是在這個接口體系下實現的,比如
    DefaultListableBeanFactory,這個基本IOC容器的實現就是實現了ConfigurableBeanFactory,從而成爲了一個簡單的IOC容器的實現。像其他IOC容器,比如XmlBeanFactory,都是在
    DefaultListableBeanFactory的基礎上做擴展,同樣地,ApplicationContext的實現也是如此。

  • 這個接口系統是以BeanFactory和ApplicationContext爲核心的。而BeanFactory又是IOC容器的最基本接口,在ApplicationContext的設計中,一方面,可以看到它繼承了BeanFactory接口體系中的ListableBeanFactory、
    AutowireCapableBeanFactory、HierarchicalBeanFactory等BeanFactory的接口,具備了BeanFactory IOC容器的基本功能;另一方面,通過繼承了MessageSource、ResourceLoder、ApplicationEventPublisher這些接口,BeanFactory爲ApplicationContext賦予了更高級的IOC容器特性。對於ApplicationContext而言,爲了在Web環境中使用它,還設計了WebApplicationContext接口,而這個接口通過繼承ThemeSource接口來擴充功能。

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