? ? spring的XML配置文件的標簽大體可以分為兩種:
? ? 其中的默認標簽,我們前面文章里面出現的標簽都是默認標簽,是spring本身自帶的,不需要我們去引入其他東西。而自定義標簽則是指非默認標簽的其他的由我們或產品發行方自定義的對接spirng的XML標簽。?這里其實就關系到spring整合其他框架了。
? ? 默認標簽與自定義標簽最大的區別就是,自定義標簽需要我們自己引入其它命名空間約束的標簽(通過前綴方式引入)。這里我們先來講一下Bean的XML配置文件的標頭。
命名空間、xsd介紹
? ? 提到配置文件里面的標簽,就離不開要談到xsd和DTD,他們都可以用來描述xml文檔的結構,以前一些老的代碼里面可能還會看到DTD,但是隨著xsd支持數據類型,所以現在看到的基本都是xsd了。
? ? XML Schema 語言是用來定義xml結構的。簡稱xsd(XML Schema Definition)
? ? 如下圖,這是一個默認的spring Bean的XML配置文件的標頭:
xmlns:意為XML 命名空間,用于定義一套xml標簽的規范。這個屬性用于定義這個 XML 文檔的默認命名空間,在這個示例中告訴解析器這個 XML 文件中的元素(如<bean>)是http://www.springframework.org/schema/beans這個命名空間下定義的。
xmlns:xsi:用于引入XML 模式實例命名空間(也就是XML Schema Instance)。這個命名空間提供了一些用于驗證 XML 文檔結構的屬性。
xsi:;schemaLocation:指定 XML 文檔所遵循的 XML Schema 的位置。這個屬性通常會有一對的值,用來指定xmlns屬性定義的文件的位置。看著像一個網址,實際可能映射的是本地的某個jar包里面的xsd文件。而且寫法上,先寫命名空間,再寫xsd地址。
? ??
總結一下引入schema文件的具體步驟:
1、查看schema文檔,找到根元素,在xml中寫出來
2、根元素來自哪個命名空間。使用xmlns指令來聲明(命名空間的作用:它指的是一個環境,所用的標簽來自于哪個環境定義的)
3、聲明引入的名稱空間跟哪個xsd文件對應
4、聲明schemaLocation哪里來的,一般都是某個標準(寫法上都是先寫命名空間+具體文件的位置,成對)
? ? 除此之外,在spring里面還有7大模塊,每個模塊也有它們自己的對應標簽。
? ? ?例如context組件,在使用注解和配置類來平替bean.xml配置文件的時候,我們就需要使用到context文件的標簽。詳細的可以去看我的另一篇文章:
<beans>標簽配置多環境
? ? 在實際開發中,我們往往會有很多環境。比如編寫代碼一個環境,測試一個環境,運維又是一個環境,每個環境可能都會有自己特定的某個東西。為了便于這些環境分開,在spring的XML配置環境里面,我們可以使用<beans>來給特定的環境配置其所需要的環境。
? ? 這里邊示范邊講解,我們編寫配置文件:
? ? 其中,在配置文件的根標簽下可以繼續使用<beans>,并不是說<beans>只作為根標簽。在用來配置環境的Bean的<beans>標簽,還需要通過屬性profile來給這個<beans>的內容啟用的環境命名。?相關的User類和AServer類大家自己定義即可,里面沒什么東西。
? ? 然后是測試類運行:
? ? 其中,使用System.setProperty();來啟用我們的spring配置文件的相關環境,而且我們的代碼運行中,多次啟用了不同的環境,那么只會生效我們最新啟用的那個環境。
? ? 這里兩個環境都有aServer,但是text環境中的aServer里面給屬性name賦值為李四,dev賦值為張三。
? ? 另外還需要注意,我們更改環境后,我們的容器還要重新加載一下進行更新,因為這個容器是根據調用對象的環境,返回對應的Bean配置,而其他不符合環境的Bean配置不會給到調用對象。
? ? 我們看斷點的變量池,這是第一個斷點處的內容,也就是開發環境下的Bean對象:
? ? 這是第二斷點處的內容:
? ?
? ? ?當然,把多個環境的配置全部寫在一個配置文件里面,會顯得很亂,所以多環境還常搭配<import>標簽使用。
<import>引入其他資源配置文件
? ? 我們編寫兩個bean的配置文件:
? ? 其中,我們的bean1文件中沒有配置user,但是我們在bean2文件中配置了user,我們在bean1引入bean2,我們就可以得到bean2里面的配置了。
? ? 測試類:
? ? ?運行結果:
? ? ?前面我們講到了多環境常搭配<import>,也就是在這里。我們在主配置文件里面,不再直接在配置多環境的<beans>標簽下編寫內容,而是把內容編寫到另一個單獨的配置文件里面,然后在主配置文件下面的多環境使用<import>導入它。
引入自定義標簽
? ? 這個自定義,不只是在說我們自己個人定義的。實際應用中,是指spring整合其他框架時,其他框架有提供自己相關XML配置的標簽,我們可以將其引入來使用。
? ? 在我的另一篇文章里講到了springContext標簽的引入,但是那是spring自己的模塊,如果我們要引入其他框架,就不像那里面演示的改幾個單詞就可以了。
? ? 在這里我以導入dubbo為例,分享一下我的個人經驗:
? ? 首先,我們要導入dubbo的jar包,然后在我們的Bean配置文件的表頭中引入相關標簽。
? ? 引入相關標簽的操作和spring一樣,關鍵在于導入dubbo的schema。但是我們要怎么寫呢?任何官方通常都會給出相關說明文檔,所以我們去到dubbo的官網查找。
? ? 進入到官網之后,我們直接ctrl+F,打開頁面關鍵詞搜索,輸入 "Schema":
? ? 搜索出結果,上來就是我們要找的導入過程。?
? ? 這里注意我們要添加的只有 xmlns:dubbo一行,以及xsi:schemaLocation中關于dubbo的xsd的成對映射。