javascript
Spring IOC实现原理
一、IOC 容器:最主要是完成了完成對象的創(chuàng)建和依賴的管理注入等等。
??所謂控制反轉(zhuǎn),就是把原先我們代碼里面需要實現(xiàn)的對象創(chuàng)建、依賴的代碼,反轉(zhuǎn)給容器來幫忙實現(xiàn)。那么必然的我們需要創(chuàng)建一個容器,同時需要一種描述來讓容器知道需要創(chuàng)建的對象與對象的關(guān)系。這個描述最具體表現(xiàn)就是我們可配置的文件。?
? ?對象和對象關(guān)系怎么表示?
? ?可以用?xml?,?properties?文件等語義化配置文件表示。?
? ?描述對象關(guān)系的文件存放在哪里?
? ?可能是 classpath , filesystem ,或者是 URL 網(wǎng)絡(luò)資源, servletContext 等。
? ?有了配置文件,還需要對配置文件解析。
? ?不同的配置文件對對象的描述不一樣,如標準的,自定義聲明式的,如何統(tǒng)一??在內(nèi)部需要有一個統(tǒng)一的關(guān)于對象的定義,所有外部的描述都必須轉(zhuǎn)化成統(tǒng)一的描述定義。
? ?如何對不同的配置文件進行解析?需要對不同的配置文件語法,采用不同的解析器。
二、IOC體系結(jié)構(gòu)
(1)?BeanFactory
??Spring?Bean的創(chuàng)建是典型的工廠模式,這一系列的Bean工廠,也即IOC容器為開發(fā)者管理對象間的依賴關(guān)系提供了很多便利和基礎(chǔ)服務(wù),在Spring中有許多的IOC容器的實現(xiàn)供用戶選擇和使用,其相互關(guān)系如下:?
? ?其中BeanFactory作為最頂層的一個接口類,它定義了IOC容器的基本功能規(guī)范,BeanFactory?有三個子類:ListableBeanFactory、HierarchicalBeanFactory?和AutowireCapableBeanFactory。但是從上圖中我們可以發(fā)現(xiàn)最終的默認實現(xiàn)類是?DefaultListableBeanFactory,他實現(xiàn)了所有的接口。那為何要定義這么多層次的接口呢?查閱這些接口的源碼和說明發(fā)現(xiàn),每個接口都有他使用的場合,它主要是為了區(qū)分在?Spring?內(nèi)部在操作過程中對象的傳遞和轉(zhuǎn)化過程中,對對象的數(shù)據(jù)訪問所做的限制。例如?ListableBeanFactory?接口表示這些?Bean?是可列表的。HierarchicalBeanFactory?表示的是這些?Bean?是有繼承關(guān)系的,也就是每個Bean?有可能有父?Bean。AutowireCapableBeanFactory?接口定義?Bean?的自動裝配規(guī)則。這四個接口共同定義了?Bean?的集合、Bean?之間的關(guān)系、以及?Bean?行為.最基本的IOC容器接口BeanFactory。
public?interface?BeanFactory?{????
? ? ??
? ? ? //對FactoryBean的轉(zhuǎn)義定義,因為如果使用bean的名字檢索FactoryBean得到的對象是工廠生成的對象,????
? ? ? //如果需要得到工廠本身,需要轉(zhuǎn)義???????????
? ? ? String?FACTORY_BEAN_PREFIX?=?"&";?
? ? ? ? ?
? ? ? //根據(jù)bean的名字,獲取在IOC容器中得到bean實例????
? ? ? Object?getBean(String?name)?throws?BeansException;????
? ??
? ? ?//根據(jù)bean的名字和Class類型來得到bean實例,增加了類型安全驗證機制。????
? ? ? Object?getBean(String?name,?Class?requiredType)?throws?BeansException;????
? ? ?
? ? ?//提供對bean的檢索,看看是否在IOC容器有這個名字的bean????
? ? ? boolean?containsBean(String?name);????
? ? ?
? ? ?//根據(jù)bean名字得到bean實例,并同時判斷這個bean是不是單例????
? ? ?boolean?isSingleton(String?name)?throws?NoSuchBeanDefinitionException;????
? ? ?
? ? ?//得到bean實例的Class類型????
? ? ?Class?getType(String?name)?throws?NoSuchBeanDefinitionException;????
? ? ?
? ? ?//得到bean的別名,如果根據(jù)別名檢索,那么其原名也會被檢索出來????
? ? String[]?getAliases(String?name);????
? ? ?
?}
http://www.cnblogs.com/ITtangtang/p/3978349.html
轉(zhuǎn)載于:https://blog.51cto.com/13010541/1935188
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Spring IOC实现原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20145209 实验三 《敏捷开发与X
- 下一篇: JS实现间歇性滚动