Spring IOC實現原理

一、IOC 容器:最主要是完成了完成對象的創建和依賴的管理注入等等。

  所謂控制反轉,就是把原先我們代碼裏面需要實現的對象創建、依賴的代碼,反轉給容器來幫忙實現。那麼必然的我們需要創建一個容器,同時需要一種描述來讓容器知道需要創建的對象與對象的關係。這個描述最具體表現就是我們可配置的文件。 

   對象和對象關係怎麼表示?
   可以用 xml , properties 文件等語義化配置文件表示。 

   描述對象關係的文件存放在哪裏?

   可能是 classpath , filesystem ,或者是 URL 網絡資源, servletContext 等。

   有了配置文件,還需要對配置文件解析。
   不同的配置文件對對象的描述不一樣,如標準的,自定義聲明式的,如何統一? 在內部需要有一個統一的關於對象的定義,所有外部的描述都必須轉化成統一的描述定義。
   如何對不同的配置文件進行解析?需要對不同的配置文件語法,採用不同的解析器。

二、IOC體系結構

(1) BeanFactory
  Spring Bean的創建是典型的工廠模式,這一系列的Bean工廠,也即IOC容器爲開發者管理對象間的依賴關係提供了很多便利和基礎服務,在Spring中有許多的IOC容器的實現供用戶選擇和使用,其相互關係如下: 

wKiom1lABgKyRIs_AAHGN9HelR8880.png-wh_50


   其中BeanFactory作爲最頂層的一個接口類,它定義了IOC容器的基本功能規範,BeanFactory 有三個子類:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是從上圖中我們可以發現最終的默認實現類是 DefaultListableBeanFactory,他實現了所有的接口。那爲何要定義這麼多層次的接口呢?查閱這些接口的源碼和說明發現,每個接口都有他使用的場合,它主要是爲了區分在 Spring 內部在操作過程中對象的傳遞和轉化過程中,對對象的數據訪問所做的限制。例如 ListableBeanFactory 接口表示這些 Bean 是可列表的。HierarchicalBeanFactory 表示的是這些 Bean 是有繼承關係的,也就是每個Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定義 Bean 的自動裝配規則。這四個接口共同定義了 Bean 的集合、Bean 之間的關係、以及 Bean 行爲.最基本的IOC容器接口BeanFactory。


public interface BeanFactory {    
      
      //對FactoryBean的轉義定義,因爲如果使用bean的名字檢索FactoryBean得到的對象是工廠生成的對象,    
      //如果需要得到工廠本身,需要轉義           
      String FACTORY_BEAN_PREFIX = "&"; 
         
      //根據bean的名字,獲取在IOC容器中得到bean實例    
      Object getBean(String name) throws BeansException;    
    
     //根據bean的名字和Class類型來得到bean實例,增加了類型安全驗證機制。    
      Object getBean(String name, Class requiredType) throws BeansException;    
     
     //提供對bean的檢索,看看是否在IOC容器有這個名字的bean    
      boolean containsBean(String name);    
     
     //根據bean名字得到bean實例,並同時判斷這個bean是不是單例    
     boolean isSingleton(String name) throws NoSuchBeanDefinitionException;    
     
     //得到bean實例的Class類型    
     Class getType(String name) throws NoSuchBeanDefinitionException;    
     
     //得到bean的別名,如果根據別名檢索,那麼其原名也會被檢索出來    
    String[] getAliases(String name);    
     
 }


http://www.cnblogs.com/ITtangtang/p/3978349.html


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