dubbo是如何“插入”到spring框架中的
原文鏈接:http://blog.csdn.net/achilles12345/article/details/41789527
----------------------------------------------------------------------------------------------
? 作為一個(gè)分布式服務(wù)治理框架,dubbo做的非常好,在業(yè)界使用很廣,所以最近研究了下這個(gè)框架。任何框架要研究其原理最好的辦法之一就是沿著其運(yùn)行流程進(jìn)行追蹤,這樣就能從上到下,從粗到細(xì)對一個(gè)系統(tǒng)進(jìn)行了解。今天,我們要說明的問題就是dubbo如何啟動(dòng)的。
? ? ? ? dubbo是基于Spring進(jìn)行開發(fā)的,而且擴(kuò)展了Spring的XML schema和注解標(biāo)簽,其實(shí)這里也就是整個(gè)dubbo的切入點(diǎn)。dubbo除去依賴其他的第三方框架外,整個(gè)框架只有一個(gè)jar包,可謂是精致。在這個(gè)jar包的NET-INF目錄下有兩個(gè)文件:spring.handlers和spring.schemas。其中spring.schemas中定義的就是擴(kuò)展的spring配置標(biāo)簽,而且spring.handlers中定義的就是這些schema的處理類,就是這個(gè)類將dubbo組件“插入”到spring這個(gè)平臺(tái)里的。(關(guān)于如何自定義spring配置的schema,網(wǎng)上資料很多,這里只簡單概括)Spring在啟動(dòng)的時(shí)候會(huì)掃描MET-INF下所有的spring.handlers等文件,找到其中的標(biāo)簽處理類,并運(yùn)行其init方法。
? ? ? ? 這里要插個(gè)知識(shí)點(diǎn)“spring的啟動(dòng)過程”。spring啟動(dòng)過程,從宏觀角度來講分為兩個(gè)階段。第一個(gè)階段完成spring配置文件的解析,或者spring注解的解析最終將這些配置或者注解解析成BeanDefinition對象,然后進(jìn)入下一個(gè)階段,比如我們經(jīng)常在spring配置文件中使用的占位符替換工作就是在這個(gè)階段完成的。在第二個(gè)階段中,spring用之前解析好的BeanDefinition對象來完成bean的初始化和組裝工作,比如我們使用spring事務(wù)時(shí)的事務(wù)proxy就是這個(gè)階段完成注入到service對象中的。
? 在這個(gè)init方法中,dubbo將自己的標(biāo)簽(application,module,registry,monitor,provider,consumer,protocol,service,reference)處理類注冊到spring中,而這些類會(huì)完成對自己所負(fù)責(zé)的標(biāo)簽的解析工作,將標(biāo)簽最終轉(zhuǎn)換為bean的描述對象BeanDefinition并返回給spring,而spring拿到這些標(biāo)簽對象完成bean的初始化、依賴注入(比如注入對RMI端的proxy對象)。
這就是dubbo的宏觀啟動(dòng)流程,這個(gè)對于理解dubbo框架的原理能起到促進(jìn)作用,網(wǎng)上也沒有明確的文章進(jìn)行說明,這里做個(gè)補(bǔ)充。希望能幫大家解決一些問題。
總結(jié)
以上是生活随笔為你收集整理的dubbo是如何“插入”到spring框架中的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中scrollview与w
- 下一篇: JDBC实现从Hive抽取数据导入Ora