Spring配置文件(xml)中的xmlns解析

时间:2022-12-24 18:46:24

以前一直没注意spring对xml的解析过程,
特别是xml文件头上的一堆xmlns:


1 <?xmlversion="1.0"encoding="UTF-8"?>
2 <?XML:NAMESPACEPREFIX = [default]
http://www.springframework.org/schema/beans
NS= "http://www.springframework.org/schema/beans"/><beans xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd&#10;http://www.springframework.org/schema/aop&#10;http://www.springframework.org/schema/aop/spring-aop-3.0.xsd&#10;http://www.springframework.org/schema/tx&#10;http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&#10;http://www.springframework.org/schema/context&#10;                           http://www.springframework.org/schema/context/spring-context-3.0.xsd"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3 </beans>

这些命名空间中是怎么解析的,
大概可以分为下面这个步骤:
1. 解析XML, 找到所有的 命名空间 如: http://www.springframework.org/schema/context
2. 在Classpath中查找所有的 spring.handlers 并解析其中配置的 命名空间 与 对应的处理类, 如:

http\://www.springframework.org/schema/aop=org.springframework.aop.config.AopNamespaceHandler

3. 根据查找到的处理Handler去解析配置文件中相应的结点.

而命名空间对应的xsd文件, 则是在 spring.schemas 中指定的, 如:

http\://www.springframework.org/schema/aop/spring-aop-2.0.xsd=org/springframework/aop/config/spring-aop-2.0.xsd
http\://www.springframework.org/schema/aop/spring-aop-2.5.xsd=org/springframework/aop/config/spring-aop-2.5.xsd
http\://www.springframework.org/schema/aop/spring-aop-3.0.xsd=org/springframework/aop/config/spring-aop-3.0.xsd
http\://www.springframework.org/schema/aop/spring-aop.xsd=org/springframework/aop/config/spring-aop-3.0.xsd