從源碼看Spring中IOC容器的實現(一):接口體系

IOC的概念:依賴注入與控制反轉

爲何須要IOC容器:

若是合做對象的引用或依賴關係的管理由具體對象來完成,會致使代碼的高度耦合以及可測試性的下降.所以,經過將對象的依賴關係交給IOC容器完成從而下降對象之間的耦合.框架

Spring中IOC容器的實現

Spring的IOC容器有兩條主線:BeanFactoryApplicationContext:測試

  • BeanFactory:簡單容器系列,只實現IOC容器的基本功能
  • ApplicationContext:容器的高級形態,在BeanFactory的基礎上,增長了許多面向框架的特性,並對應用環境作了適配.

BeanFactory與ApplicationContext接口體系

話很少說,直接上圖:設計

BeanFactory接口體系

ApplicationContext接口體系

上圖分別是BeanFactory和ApplicationContext的接口體系,在每一個接口(或抽象類,實現類)旁都標註了該類的做用cdn

是否是看不過來?不要緊,咱們慢慢分析.對象

IOC容器的設計主線

BeanFactory做爲一個最基本的接口類出如今Spring的IOC容器體系中,爲IOC容器的具體實現制定基本的功能規範,體現了Spring爲提供給用戶使用的IOC容器所設定的最基本的功能規範。包括Bean的獲取以及一些類型判斷等功能.blog

BeanFactory接口定義

  • 從BeanFactory的類繼承圖中來看其基本功能的定義,在IOC容器的設計中包括兩條設計主線:

1. BeanFactory設計路徑

從接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一條主要的BeanFactory設計路徑。繼承

BeanFactory設計路徑

在這條設計路徑中,BeanFactory接口定義了基本的IOC容器的規範,包括了getBean()這樣的IOC容器的基本方法。而HierarchicalBeanFactory接口在繼承了BeanFactory的基本接口以後,增長了getParentBeanFactory(),使BeanFactory具有了雙親IOC容器的管理功能。在ConfigurableBeanFactory中主要定義對BeanFactory的配置功能,好比設置雙親容器,配置Bean後置處理器等。經過這些接口設計的疊加,定義了BeanFactory就是簡單IOC容器的基本功能。接口

這裏涉及的是主要接口關係,而具體的IOC容器都是在這個接口體系下實現的,好比咱們熟知的DefaultListableBeanFactory,這個基本IOC容器的實現就是實現了ConfigurableBeanFactory,從而成爲一個簡單IOC容器的實現。get

DefaultListableBeanFactory

2. ApplicationContext爲核心的接口設計

第二條設計主線,是以ApplicationContext爲核心的接口設計。it

BeanFactory--》ListableBeanFactory--》ApplicationContext--》ConfigurableApplicationContext.

在這個接口體系中,ListableBeanFactory和HierarchicalBeanFactory兩個接口鏈接Beanfactory定義和ApplicationContext定義。

ApplicationContext爲核心的接口設計

在ListableBeanFactory中,細化了許多BeanFactory的接口功能。而ApplicationContext經過繼承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory簡單容器的基礎上添加了許多對高級容器的特性的支持。

相關文章
相關標籤/搜索