Spring IOC容器的設計與實現(1):BeanFactory

Spring IOC的容器設計中,咱們能夠看到兩個主要的容器系列:數據結構

  • 一個是實現BeanFactory接口的簡單容器系列,這系列容器只實現了最基本的功能spa

  • 另外一個是ApplicationContext應用上下文,做爲容器的高級形態出現設計

1.SpringIOC容器系列對象

如圖展現了Spring IOC容器的狀況:繼承


接口類BeanFactory,它體現了Spring爲提供給用戶使用的IOC容器的最基本的功能的規範.BeanFactory做爲一個最基本的接口出如今Spring IOC的容器體系中.接口

Spring經過定義BeanDefinition來管理Spring的應用中的各類對象以及它們之間的相互依賴關係.Spring IOC來講,BeanDefinition就是對依賴翻轉模式中管理的對象依賴關係的數據抽象,也是容器實現依賴翻轉功能的核心數據結構.開發

2.Spring IOC容器的設計get

如圖展現了Spring IOC的主要接口設計:it


  • 從BeanFactory 到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一條主要的BeanFactory的設計路徑.BeanFactory接口定義了IOC容器的基本功能規範.HierarchicalBeanFactory在繼承了BeanFactory 接口後,增長了getParentBeanFactory()方法,這樣就使容器具有了雙親IOC的管理功能.ConfigurableBeanFactory接口中,主要是定義了一些BeanFactory 的配置功能.io

  • 第二條設計主線,是以ApplicationContext爲核心的接口設計.咱們經常使用的應用上下文主要都是WebApplicationContext或者ConfigurableApplicationContext的實現.

  • 這裏涉及的是主要接口關係,而具體的IOC容器都是在這個接口體系下實現的.

2.1 BeanFactory的應用場景

BeanFactory 接口定義了IOC容器的最基本形式,並提供了IOC容器應該遵照的最基本的服務契約.

用戶使用容器的時候,可使用轉義字符"&"來獲取FactoryBean自己.例如myJndiObject是一個FactoryBean,那麼使用&myJndiObject獲取到的是FactoryBean,而不是這個FactoryBean產生出來的對象.

  • BeanFactoryFactoryBean:一個是Factory,也就是IOC容器的對象工廠;一個只是一個Bean.Spring中,全部的Bean都是由BeanFactory來進行管理的.

BeanFactory接口設計了getBean方法,這個方法是使用IOC容器API的主要方法,經過這個方法,能夠取得IOC容器中管理的Bean.有了BeanFactory的定義,咱們能夠執行如下操做:

2.2 BeanFactory容器的設計原理

BeanFactory接口提供了使用IOC容器的規範.在這個基礎上,Spring還提供了不少符合這個IOC容器接口的一系列容器供開發人員使用.咱們以XmlBeanFactory的實現爲例來講明IOC容器的設計原理.

做爲一個簡單IOC的最底層實現的XmlBeanFactory,他有一個很是明顯的特徵:他只提供最基本的IOC容器的功能.這一點和ApplicationContext是有區別的.

XmlBeanFactory繼承自DefaultListableBeanFactory.而DefaultListableBeanFactory實際上包含了基本IOC所具備的重要功能.XmlBeanFactory是一個能夠以XML方式定義的BeanDefinition的IOC容器.對這些XML文件定義信息的處理其實並非由XmlBeanFactory直接完成的.XmlBeanFactory,初始化了一個final的XmlBeanDefinitionReader,XML形式的信息處理實際上也是由他完成的.

相關文章
相關標籤/搜索