`
everlook
  • 浏览: 112524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Schema命名空间

阅读更多
抄别人的文章,备忘。

Schema命名空间的声明

对于基于XML的配置,Spring 1.0的配置文件采用DTD格式,Spring 2.0以后使用Schema的格式,后者让不同类型的配置拥有了自己的命名空间,使配置文件更具扩展性。此外,Spring基于Schema配置方案为许多领域的问题提供了简化的配置方法,配置工作因此得到了大幅简化。

采取基于Schema配置格式,文件头的声明会复杂一些,先看一个简单的示例:

<?xml version="1.0" encoding="UTF-8"?>
<beans
   xmlns="http://www.springframework.org/schema/beans"
   --1.默认的命名空间

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   --2.xsi标准命名空间,用于指定义自定义命名空间的schema文件

   xmlns:aop="http://www.springframework.org/schema/aop"
   --3.自定义命名空间,简称aop。
   --后面跟的是空间全称,必须在xsi命名空间为自定义空间指定对应schema文件

   xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
  --4.为每个命名空间指定具体的schema文件
  
   <!-- 使用默认的空间命名配置-->
   <bean id="green" class="com.my.Green"/>

   <!-- aop命名空间的配置-->
   <aop:config>
        <aop:advisor pointcut="execution(**..Green.*(..))" advice-ref="txAdvice"/>
   </aop:config>

</beans>

要了解文件头中声明的内容,需要学习一点XML Schema的知识,Schema在文档根节点中通过xmlns对文档中的命名空间进行声明。我们在上面的代码中定义了3个命名空间:

① 默认命名空间:它没有空间名,用于Spring Bean的定义;
②  xsi命名空间:这个命名空间用于为每个文档中命名空间指定相应的Schema样式文件,是标准组织定义的标准命名空间;
③  aop命名空间:这个命名空间是Spring配置AOP的命名空间,是用户自定义的命名空间。

命名空间的定义分为两个步骤:第一步指定命名空间的名称,第二步指定命名空间的Schema文档样式文件的位置,用空格或回车换行进行分隔。

在第一步中,需要指定命名空间的缩略名和全名,请看下面配置所定义的命名空间:

xmlns:aop="http://www.springframework.org/schema/aop"

aop为命名空间的别名,一般使用简洁易记的名称,文档后面的元素可通过命名空间别名加以区分,如<aop:config/>等。而http://www.springframework.org/schema/aop为空间的全限定名,习惯上用文档发布机构的官方网站和相关网站目录作为全限定名。这种命名方式既可以标识文档所属的机构,又可以很好地避免重名的问题。但从XML Schema语法来说,别名和全限定名都可以任意命名。

如果命名空间的别名为空,则表示该命名空间为文档默认命名空间,文档中无命名空间前缀的元素都属于默认命名空间,如<beans/>、<bean/>等都属于①处定义的默认命名空间。
在第二步中,为每个命名空间指定了对应的Schema文档格式定义文件,定义的语法是:

<命名空间1>空格<命名空间1的schema文件>空格<命名空间2>空格<命名空间2的schema文件>....

命名空间使用全限定名,每个组织机构在发布Schema文件后,都会为该Schema文件提供一个引用的URL地址,一般使用这个URL地址指定命名空间对应的Schema文件。命名空间名称和对应的Schema文件地址之间使用空格或回车分隔,不同的命名空间之间也使用这种分隔方法。

指定命名空间的Schema文件地址有两个用途:XML解析器可以获取Schema文件并对文档进行格式合法性验证;在开发环境下,IDE可以引用Schema文件对文档编辑提供诱导功能。



XML的特殊字符

XML中共有5个特殊的字符,分别是:&<>“’。如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理。有两种解决方法:其一,采用本例中的<![CDATA[ ]]>特殊标签,将包含特殊字符的字符串封装起来;其二,使用XML转义序列表示这些特殊的字符,这5个特殊字符所对应XML转义序列在表4-2中说明:

<   ---->   &lt;
>   ---->   &gt;
&   ---->   &amp;
"    ---->   &quot;
'    ---->    &apos;

Spring在进行XML配置时,如果属性值包含了一个XML的特殊符号,因此我们特意在属性值外添加了一个<![CDATA[ ]]>的XML特殊处理标签,<![CDATA[ ]]>的作用是让XML解析器将标签中的字符串当作普通的文本对待,以防止某些字符串对XML格式造成破坏。来看一个例子
<bean id="car" class="com.baobaotao.attr.Car">
<property name="maxSpeed">
<value>200</value>
</property>
<property name="brand">①
<value><![CDATA[红旗&CA72]]></value>
</property>
</bean>

如果使用XML转义序列,我们可以使用以下的配置替换代码清单4-10中的配置:
<property name="brand"><value>红旗&amp;CA72</value></property>

最后说下命名空间的作用:XML标签没有被预定义,每个标签要自己定义,每个人都能定义,所以会出现很多人或公司定义出相同的标签,而这些标签因定义的人不同,意义也不一样。因此要有命名空间,说白了就是指明这个标签谁定义的,然后根据不同的定义的人来解释这个标签。
分享到:
评论

相关推荐

    扩展Spring schema样例代码 maven

    在扩展Spring Schema的过程中,你需要定义一个新的命名空间(namespace),然后提供对应的解析器(NamespaceHandler)和元素处理器(BeanDefinitionParser)。命名空间是XML文件中识别自定义标签的关键,而解析器和...

    spring schema

    在Spring框架中,Schema是一种定义XML文档结构的规范,它通过一系列的命名空间(namespace)和元素(element)来定义Bean的属性和行为。例如,`&lt;beans&gt;`元素是Spring配置的基本容器,而`&lt;bean&gt;`元素则用来声明一个...

    spring framework schema

    以下是关于“spring framework schema”及其相关标签“springschema”的详细知识点: 1. **Schema**: 在Spring Framework中,schema是一种XML配置方式,用于定义bean的行为和依赖关系。例如,`jdbc`、`jms`、`cache...

    spring-5.2.9.RELEASE-schema.zip

    `jee:`命名空间用于配置这些企业级服务,使Spring更好地融入到企业环境中。 总结起来,"spring-5.2.9.RELEASE-schema.zip"压缩包中的每个子文件都对应了Spring框架的一个重要方面,它们共同构成了Spring的强大功能...

    自定义 Schema 解析 Spring Bean

    自定义Schema解析是Spring框架提供的一个强大特性,它允许开发者创建自己的XML命名空间,从而定义自己的配置元素和属性。这在大型项目中特别有用,因为可以创建特定于项目的配置约定,提高代码的可读性和可维护性。 ...

    spring4.2.0的schema约束

    4. **Namespace和Element**:Spring的schema通常包含多个命名空间(namespace),每个命名空间代表一类功能,如`&lt;beans&gt;`、`&lt;context&gt;`、`&lt;aop&gt;`等。每个命名空间下有多个元素(element),如`&lt;bean&gt;`、`&lt;property&gt;`...

    spring-framework-3.2.0.RC2-schema.zip

    在XML Schema中,`beans`命名空间提供了诸如 `&lt;bean&gt;`、`&lt;property&gt;`、`&lt;constructor-arg&gt;`等元素,用于定义对象实例及其依赖关系。通过这些元素,我们可以实现对象的无状态化、解耦合,从而提高代码的可维护性和可...

    Spring自定义配置Schema可扩展(二)

    这个类的作用是处理与自定义命名空间相关的解析工作。在`init()`方法中,通过`registerBeanDefinitionParser()`注册了一个名为`annotation-endpoint`的配置支持元素。`AnnotationBeanDefinitionParser`类则负责解析...

    Spring自定义配置Schema可扩展(一)

    在实际应用中,`@Endpoint`注解可能会包含一些属性,比如服务的命名空间、端点地址等。在`BeanDefinitionParser`中,我们需要读取这些属性,并将它们设置到生成的`BeanDefinition`中。这样,当Spring初始化bean时,...

    Spring实战之使用util:命名空间简化配置操作示例

    本文实例讲述了Spring使用util:命名空间简化配置操作。分享给大家供大家参考,具体如下: 一 配置 &lt;?xml version=1.0 encoding=GBK?&gt; &lt;!-- 指定Spring配置文件的根元素和Schema 导入p:命名空间和util:...

    xmlschema-core-2.0.3的jar

    4. **命名空间管理**:XML Schema支持命名空间,库能有效地管理和处理命名空间,确保正确解析和引用元素和属性。 5. **错误报告**:在验证过程中,如果发现不符合规范的地方,会生成详细的错误信息,帮助开发者调试...

    springsecurity中文

    我们推荐你尝试一下 SpringSource 工具套件,因为它具有处理 Spring 组合命名空间的特殊功能。 要开始在你的应用环境里使用 security 命名空间,你所需要的就是把架构声明添加到你的应用环境文件里: ...

    spring-5.2.19.RELEASE-schema.zip

    这个压缩包包含了一系列与Spring框架相关的XML架构文件,这些文件定义了Spring配置文件中可以使用的元素、属性和命名空间,帮助开发者理解和构建合法的Spring配置。接下来,我们将深入探讨每个子文件夹所代表的...

    spring-framework-5.0.0.RELEASE-dist.zip

    例如,`http://www.springframework.org/schema/beans`是Spring核心组件的配置命名空间,`http://www.springframework.org/schema/aop`则用于配置AOP方面的相关规则。 4. **Spring 5.0.0.RELEASE** 版本的改进与新...

    spring-framework-2.5.1类包

    XML Schema的支持和自定义命名空间的使用大大减少了基于XML的配置。使用Java5及更新版本java的开发人员如今可以利用植入了像泛型(generic)和注解等新语言特性的Spring库。最近,和AspectJ表达式语言的紧密集成,...

    spring配置全书(中文)

    - **命名空间扩展**:除了基本的`beans`命名空间外,Spring还支持其他多种命名空间,例如`context`、`aop`、`tx`等,以提供更为丰富的配置选项。 - **示例**:引入`context`命名空间及其对应的Schema Location。 `...

    Eclipse schema XML 提示

    - 在XML Catalog页面,你会看到一个“Entries”区域,这里用来管理你的XML命名空间和对应的XSD文件。 3. **添加XSD引用**: - 点击“Entries”区域下方的`Add...`按钮,弹出添加对话框。 - 在“Kind”选项中,...

Global site tag (gtag.js) - Google Analytics