若是合做對象的引用或依賴關係的管理由具體對象來完成,會致使代碼的高度耦合以及可測試性的下降.所以,經過將對象的依賴關係交給IOC容器完成從而下降對象之間的耦合.框架
Spring的IOC容器有兩條主線:BeanFactory和ApplicationContext:測試
話很少說,直接上圖:設計
上圖分別是BeanFactory和ApplicationContext的接口體系,在每一個接口(或抽象類,實現類)旁都標註了該類的做用cdn
是否是看不過來?不要緊,咱們慢慢分析.對象
BeanFactory做爲一個最基本的接口類出如今Spring的IOC容器體系中,爲IOC容器的具體實現制定基本的功能規範,體現了Spring爲提供給用戶使用的IOC容器所設定的最基本的功能規範。包括Bean的獲取以及一些類型判斷等功能.blog
從接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一條主要的BeanFactory設計路徑。繼承
在這條設計路徑中,BeanFactory接口定義了基本的IOC容器的規範,包括了getBean()這樣的IOC容器的基本方法。而HierarchicalBeanFactory接口在繼承了BeanFactory的基本接口以後,增長了getParentBeanFactory(),使BeanFactory具有了雙親IOC容器的管理功能。在ConfigurableBeanFactory中主要定義對BeanFactory的配置功能,好比設置雙親容器,配置Bean後置處理器等。經過這些接口設計的疊加,定義了BeanFactory就是簡單IOC容器的基本功能。接口
這裏涉及的是主要接口關係,而具體的IOC容器都是在這個接口體系下實現的,好比咱們熟知的DefaultListableBeanFactory,這個基本IOC容器的實現就是實現了ConfigurableBeanFactory,從而成爲一個簡單IOC容器的實現。get
第二條設計主線,是以ApplicationContext爲核心的接口設計。it
BeanFactory--》ListableBeanFactory--》ApplicationContext--》ConfigurableApplicationContext.
在這個接口體系中,ListableBeanFactory和HierarchicalBeanFactory兩個接口鏈接Beanfactory定義和ApplicationContext定義。
在ListableBeanFactory中,細化了許多BeanFactory的接口功能。而ApplicationContext經過繼承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory簡單容器的基礎上添加了許多對高級容器的特性的支持。