Spring 總共有十幾個(gè)組件,核心容器(Spring core),?Spring上下文(Spring context),Spring面向切面編程(Spring AOP),Spring DAO模塊,Spring ORM模塊,Spring Web模塊,Spring MVC框架(Spring WebMVC)。
目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、巧家網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。但是真正核心的組件只有三個(gè):Core、Context 和 Bean。它們構(gòu)建起了整個(gè) Spring的骨骼架構(gòu),沒有它們就不可能有 AOP、Web 等上層的特性功能。
一、Spring的設(shè)計(jì)理念
Bean組件是 Spring核心中的重點(diǎn),Spring 就是面向Bean編程的(Bean Oriented Programming:BOP)就像Object 對OOP的意義一樣,沒有對象的概念就像沒有面向?qū)ο蟮木幊?,在Spring中沒有Bean也就沒有Spring存在的意義。我們使用 Spring的主要一個(gè)原因就是 Spring會把對象之間的依賴關(guān)系轉(zhuǎn)而用配置文件來管理。也就是依賴注入機(jī)制。而這個(gè)注入關(guān)系在一個(gè)叫 IOC的容器中管理,而IOC容器就是被Bean包裹的對象。Spring正是通過把對象包裝在Bean中從而達(dá)到管理這些對象及做一系列額外操作的目的。
前面如果把 Bean比作一場演出中的演員,Context就是這場演出的舞臺背景,而 Core應(yīng)該就是演出的道具了。Bean包裝的是Object,而 Object必然有數(shù)據(jù),如何給這些數(shù)據(jù)提供生存環(huán)境就是Context要解決的問題,對Context來說它就是要發(fā)現(xiàn)每個(gè)Bean之間的關(guān)系并維護(hù)好這種關(guān)系。所以Context就是一個(gè)Bean關(guān)系的集合,這種關(guān)系集合又叫 IOC容器。Core組件用來發(fā)現(xiàn)、建立和維護(hù)每個(gè) Bean之間所需的一系列工具,把 Core組件也可以看成是Util。
二、Bean組件
Bean組件在Spring的 org.springframework.beans 包下,在這個(gè)包下的所有類主要解決了3件事:Bean的定義、Bean的創(chuàng)建及對Bean的解析。對Spring使用者來說唯一需要關(guān)心的就是Bean的創(chuàng)建,其他兩個(gè)由Spring在內(nèi)部完成。BeanDefination:Bean的定義完整的描述了在 Spring配置文件中定義的
Bean的解析過程非常復(fù)雜,功能被分的很細(xì)。因?yàn)檫@里需要被擴(kuò)展的地方很多,必須保證有足夠的靈活性,以應(yīng)對可能的變化。Bean的解析主要就是對Spring配置文件的解析。
三、Context組件
Context 在 Spring的 org.springframework.context 包下,給 Spring提供一個(gè)運(yùn)行時(shí)的環(huán)境,用于保存各個(gè)對象的狀態(tài)。ApplicationContext 是 Context 的父類,它除了能標(biāo)識一個(gè)應(yīng)用環(huán)境的基本信息外,還集成了5個(gè)接口來擴(kuò)展 Context 的功能。例如:通過繼承 BeanFactory 表明容器中運(yùn)行的主體對象是 Bean,另外繼承了 ResourceLoader接口,使得 ApplicationContext可以訪問外部資源(在Core中說明);
【1】ApplicationContext 的子類主要包含兩個(gè)方面:
?● ?ConfigurableApplicationContext 表示該 Context 是可修改的,也就是在構(gòu)建 Context 中,用戶可以動態(tài)添加或修改已有的配置信息,其中最經(jīng)常使用的是可更新的 Context,即 AbstractRefreshableApplicationContex類;
?● ?WebApplicationContext 為Web裝備的Context,可直接訪問ServletContext;
【2】再往下分別就是構(gòu)建 Context的文件類型,接著就是訪問 Context的方式,這樣一級一級構(gòu)成了完成的 Context等級層次。總體來說 ApplicationContext 必須要完成一下幾件事情:
? ? ?標(biāo)識一個(gè)應(yīng)用環(huán)境;
? ? ?利用 BeanFactory創(chuàng)建Bean對象;
? ? ?保存對象關(guān)系表;
? ? ?能夠捕捉各種事件;
Context 作為 Spring的IOC容器,基本上整合了 Spring的大部分功能,或者說是大部分功能的基礎(chǔ)。
四、Core組件
Core 組件作為 Spring的核心組件,其中包含了很多關(guān)鍵類,例如:定義了資源的訪問方式。這種將所有資源都抽象成一個(gè)接口的方式很值得以后的設(shè)計(jì)中拿來學(xué)習(xí)。
Context 與 Core之間的關(guān)系:比如 Context一般會把資源的加載、解析和描述工作委托給 ResourcePatternResolver類來完成,它相當(dāng)于一個(gè)接頭人,把資源的加載、解析和資源的定義整合在一起便于其他組件使用,在Core組件中還有很多類似的方式。
五、IOC容器如何工作IOC容器實(shí)際上是 Context組件結(jié)合其他兩個(gè)組件共同構(gòu)建了一個(gè) Bean關(guān)系網(wǎng),如何構(gòu)建這個(gè)關(guān)系網(wǎng),構(gòu)建的入口就在AbstractApplicationContext 類的 refresh方法中,這個(gè)方法代碼如下:
@Override
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// 為刷新做準(zhǔn)備的 Context
prepareRefresh();
// 刷新所有BeanFactory子容器
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// 創(chuàng)建BeanFactory
prepareBeanFactory(beanFactory);
try {
// 注冊實(shí)現(xiàn)了BeanPostProcess接口的Bean
postProcessBeanFactory(beanFactory);
// 初始化和執(zhí)行BeanFactoryPostProcess beans
invokeBeanFactoryPostProcessors(beanFactory);
// 初始化和執(zhí)行BeanPostProcess beans
registerBeanPostProcessors(beanFactory);
// 初始化 message source
initMessageSource();
// 初始化 event multicaster
initApplicationEventMulticaster();
// 刷新子類實(shí)現(xiàn)的方法
onRefresh();
// 檢查注冊事件
registerListeners();
// 初始化 (non-lazy-init) 單例Bean
finishBeanFactoryInitialization(beanFactory);
// 執(zhí)行LifecycleProcessor.onRefresh()和ContextRefreshedEvent事件
finishRefresh();
}
catch (BeansException ex) {
destroyBeans();//如果刷新失敗那么就會將已經(jīng)創(chuàng)建好的單例Bean銷毀掉
cancelRefresh(ex);//重置context的活動狀態(tài)
throw ex;//拋出異常
}
}
}
這個(gè)方法就是構(gòu)建整個(gè) IOC容器過程的完整代碼,了解里面的每一行代碼,基本上就了解了大部分 Spring的原理和功能。這段主要包含一下步驟:
? 1)、構(gòu)建BeanFactory,以便于產(chǎn)生所需的“演員”;
? 2)、注冊可能感興趣的事件;
? 3)、創(chuàng)建Bean實(shí)例對象;
? 4)、觸發(fā)被監(jiān)聽的事件;
六、IOC容器的擴(kuò)展點(diǎn)
對 Spring的 IOC容器來說,主要有 BeanFactoryPostProcessor和 BeanPostProcessor,他們分別在構(gòu)建 BeanFactory和構(gòu)建Bean對象時(shí)調(diào)用。還有就是 InItializingBean 和 DisposableBean,他們分別在Bean創(chuàng)建和銷毀時(shí)調(diào)用。用戶可以實(shí)現(xiàn)在這些接口中定義的方法,Spring 會在適當(dāng)?shù)臅r(shí)候調(diào)用它們。還有一個(gè)是FactoryBean,它是個(gè)特殊的Bean,可以被用戶更多的控制。
這些擴(kuò)展點(diǎn)通常也是我們使用 Spring來完成特殊任務(wù)的地方,如何精通Spring就看是否掌握好Spring有哪些擴(kuò)展點(diǎn),以及如何使用它們。要知道如何使用它們就必須了解它們內(nèi)在的機(jī)制。
ApplicationContext.xml 就是 IOC容器的默認(rèn)配置文件,Spring 的所有特性功能都是基于 IOC容器工作的。我們可以通過實(shí)現(xiàn)Spring 的擴(kuò)展點(diǎn)來改變 Spring的通用行為。至于如何實(shí)現(xiàn)擴(kuò)展點(diǎn)來得到我們想要的結(jié)果,在Spring中有很多例子,其中AOP的實(shí)現(xiàn)就是通過擴(kuò)展點(diǎn)達(dá)到想要的特性功能,可以拿來參考。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前標(biāo)題:Spring的核心組件詳解-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://jinyejixie.com/article30/csdopo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、服務(wù)器托管、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、Google、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容