spring源碼解讀(一) —— xml頭文件的作用

Spring的核心功能之一就是IOC,也就是一個容器管理功能,那麼我們怎麼將我們定義的bean注入的Spring容器中,spring中,提供了xml文檔,我們將我們的bean定義在xml中,spring中就可以管理我們的對應,xml定義如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myTestBean" class="com.study.MyTestBean">
    </bean>
</beans>

今天我們先不看bean,而是關注在爲什麼我們的xml中的頭文件,爲什麼要怎麼定義,它到底有何作用。

一、DTD和XSD

DTD(Document Type Definition):文檔類型定義,是一種xml約束模式語言,是xml文件驗證機制,屬於xml文件組成的一部分。簡單說,DTD可以幫助我們驗證我們的xml是否是按照要求來寫的。

一個DTD文檔包含:元素的定義規則,元素間關係的定義規則,元素可使用的屬性,可使用的實體或符號規則。在主要在mapper的生命中使用這中格式,格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

XSD(XML Schemas Definition):和DTD類似,描述了xml文檔的結構,可以用來驗證xml是否是正確格式。其格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd>

其主要包含名稱空間及(xmlns="http://www.springframework.org/schema/beans");還包括對應的xsd所存儲的位置信息,其中位置信息包含兩部分,一是名稱空間的URI,另一部分就是該名稱空間所標識的文件位置或URL地址(xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd).

二、spring源碼導讀。

從上面的描述我們知道不管是DTD,還是XSD其實最主要的功能就是幫助我們驗證XML文件的正確性,下面讓我們跟進源碼去看一下,是如何幫助我們驗證的,以XSD爲例:

示例代碼如下:

public static void main(String[] args) {
        XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactory.xml"));
        MyTestBean bean = (MyTestBean)bf.getBean("myTestBean");
        System.out.println(bean.getTestStr());
    }

其中getValidationModeForResource這個方法就是驗證我們的xml文件是否是符合書寫要求的,進入方法可以看到:

這裏主要是判斷是手動驗證還是自動驗證,因爲我們這裏並沒有進行手動設置所以是走到了自動驗證邏輯中,再次進入自動驗證的代碼,如下:

 這裏主要就是驗證我們的xml是DTD,還是XSD,DTD返回2,XSD返回3,那麼spring中是怎麼進行判斷的其實就是根據hasDocType這個方法,來判斷的,主要xml文件中包含DOCTYPE,就是DTD格式,不包含就是XSD

所以spring就會根據我們定義的xml文件類型,來加載對應的xml文件,具體的加載內容,我們下篇文章繼續講解。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章