Dubbo 通過Spring 配置具體啟動服務


dubbo 服務的啟動加載過程,請先看 : http://www.cnblogs.com/ghj1976/p/5316126.html 

以 dubbo-demo-provider-2.5.4-SNAPSHOT 為例, 把這個文件當zip文件解壓縮后,

我們在其中可以找到 spring 的 配置文件: dubbo-demo-provider.xml

內容如下:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
   
    <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
  
    <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
   
</beans>

Spring其實就是一個大型的工廠,而Spring容器中的Bean就是該工廠的產品.對於Spring容器能夠生產那些產品,則取決於配置文件中配置。

對於我們而言,我們使用Spring框架所做的就是兩件事:開發Bean、配置Bean。對於Spring礦建來說,它要做的就是根據配置文件來創建Bean實例,並調用Bean實例的方法完成“依賴注入”。

<beans…/>元素是Spring配置文件的根元素,<bean…/>元素師<beans../>元素的子元素,<beans…/>元素可以包含多個<bean…/>子元素,每個<bean…/>元素可以定義一個Bean實例,每一個Bean對應Spring容器里的一個Java實例定義Bean時通常需要指定兩個屬性。

  • Id:確定該Bean的唯一標識符,容器對Bean管理、訪問、以及該Bean的依賴關系,都通過該屬性完成。Bean的id屬性在Spring容器中是唯一的。   
  • Class:指定該Bean的具體實現類。注意這里不能使接口。通常情況下,Spring會直接使用new關鍵字創建該Bean的實例,因此,這里必須提供Bean實現類的類名。

Spring容器集中管理Bean的實例化,Bean實例可以通過BeanFactory的getBean(Stringbeanid)方法得到。BeanFactory是一個工廠,程序只需要獲取BeanFactory引用,即可獲得Spring容器管理全部實例的引用。程序不需要與具體實例的實現過程耦合。大部分Java EE應用里,應用在啟動時,會自動創建Spring容器,組件之間直接以依賴注入的方式耦合,甚至無須主動訪問Spring容器本身。

當我們在配置文件中通過<bean id=”xxxx” class=”xx.XxClass”/>方法配置一個Bean時,這樣就需要該Bean實現類中必須有一個無參構造器。故Spring底層相當於調用了如下代碼:

Xxx = new xx.XxClass() 

參考: http://blog.csdn.net/chenssy/article/details/8222744

 

 

Spring 有一種配置文件加載設置:ClassPathXmlApplicationContext

ClassPathXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,你不需要提供 XML 文件的完整路徑,只需正確配置 CLASSPATH 環境變量即可,因為,容器會從 CLASSPATH 中搜索 bean 配置文件。

有關ClassPathXmlApplicationContext 的信息請參考:

http://www.blogjava.net/xcp/archive/2011/06/22/352821.html

http://www.blogjava.net/wangkai40/archive/2009/08/28/292927.html

http://heisetoufa.iteye.com/blog/1671306

這里用的  classpath*:META-INF/spring/*.xml 中信息介紹如下:

classpath*:  可以加載多個配置文件,如果有多個配置文件,就用這個。

classpath*:的使用是為了多個component(最終發布成不同的jar包)並行開發,各自的bean定義文件按照一定的規則:package+filename,而使用這些component的調用者可以把這些文件都加載進來.

classpath*:的加載使用了classloader的 getResources() 方法,如果是在不同的J2EE服務器上運行,由於應用服務器提供自己的classloader實現,它們在處理jar文件時的行為也許會有所不同。 要測試classpath*: 是否有效,可以用classloader從classpath中的jar文件里加載文件來進行測。

參考: http://blog.csdn.net/kkdelta/article/details/5507799

 

完整的啟動加載過程如下圖:

image

 

參考資料:

http://dubbo.io/Configs-zh.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM