1. 程式人生 > >Spring IOC實現原理

Spring IOC實現原理

spring ioc實現原理

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

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

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

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

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

有了配置文件,還需要對配置文件解析。

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

二、IOC體系結構

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

技術分享


其中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


Spring IOC實現原理