美文网首页java程序员
说说在 Spring 中如何基于 XML 进行配置

说说在 Spring 中如何基于 XML 进行配置

作者: deniro | 来源:发表于2018-04-28 15:36 被阅读69次

    对于基于 XML 的配置, Spring 1.0 采用的是 DTD格式。而在 Spring 2.0 以后使用的是 Schema 格式,这使得不同类型的配置拥有了自己的命名空间,这让配置更具扩展性 。

    文件头声明

    Schema 在文档根节点通过 xmlns 来声明所需要的命名空间。在上面的示例中,我们定义了三类命名空间:

    • 默认命名空间 - 它没有空间名,用于 Spring Bean 的定义。
    • xsi 命名空间 - 这个命名空间用于为每个文档中命名空间指定相应的 Schema 样式文件,是 W3C 定义的标准命名空间。
    • aop 命名空间 - 这个命名空间是用于配置Spring AOP,是自定义的命名空间 。

    命名空间的定义分为两步:

    1. 指定命名空间的名称。
    2. 指定命名空间的 Schema 文档样式文件的位置,用空格或回车换行进行分隔 。

    在第一步中,需要指定命名空间的缩略名与别名,比如:

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

    这里的 aop 是别名,一般是简洁易记的名称,文档后面的元素通过命名空间的别名加以区分。http://www.springframework.org/schema/aop 是命名空间的全限定名,习惯上使用文档发布机构的网站加目录名作为全限定名。

    如果没有指定命名空间的别名,则表示使用文档默认的命名空间。

    第二步,我们为每一个命名空间指定对应的 Schema 文档格式的定义文件,语法如下:

    <命名空间 1><分隔符><命名空间 1 Schema URL 地址><命名空间 2><分隔符><命名空间 2 Schema URL 地址> ...
    

    命名空间的 Schema 文件地址有这些用途:

    1. XML 解析器可以对 Schema 文件进行格式合法性验证。
    2. 在开发环境下,IDE 会引用 Schema 文件,在代码编辑器中提供自动补全功能。IDE 会首先从本地类路径中查找 Schema 文件,如果不存在,才会从远程加载。

    Spring 4.0 配置的 Schema 文件放置在各模块 JAR 文件中的一个名为 config 的目录下。

    下面对这些 Schema 文件的用途,进行简要说明:

    Schema 文件 说明 命名空间 Schema URL
    spring-beans-4.0.xsd 配置 Bean http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    spring-aop-4.0.xsd 配置 AOP http://www.springframework.org/schema/aop http://www.springframework.org/schema/beans/spring-aop-4.0.xsd
    spring-tx-4.0.xsd 配置声明式事务 http://www.springframework.org/schema/tx http://www.springframework.org/schema/beans/spring-tx-4.0.xsd
    spring-mvc-4.0.xsd 配置 MVC(Spring 3.0 新增) http://www.springframework.org/schema/mvc http://www.springframework.org/schema/beans/spring-mvc-4.0.xsd
    spring-util-4.0.xsd 用于简化配置 http://www.springframework.org/schema/util http://www.springframework.org/schema/beans/spring-util-4.0.xsd
    spring-jee-4.0.xsd 用于简化 EJB、JNDI 等配置 http://www.springframework.org/schema/jee http://www.springframework.org/schema/beans/spring-jee-4.0.xsd
    spring-jdbc-4.0.xsd 用于配置 Spring 内嵌数据库(Spring 3.0 新增) http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/beans/spring-jdbc-4.0.xsd
    spring-jms-4.0.xsd 用于配置 JMS http://www.springframework.org/schema/jms http://www.springframework.org/schema/beans/spring-jms-4.0.xsd
    spring-lang-4.0.xsd 用于集成 JRuby 与 Groovy 等动态语言 http://www.springframework.org/schema/lang http://www.springframework.org/schema/beans/spring-lang-4.0.xsd
    spring-oxm-4.0.xsd 用于配置对象 XML 映射 http://www.springframework.org/schema/oxm http://www.springframework.org/schema/beans/spring-oxm-4.0.xsd
    spring-task-4.0.xsd 用于配置任务调度 http://www.springframework.org/schema/task http://www.springframework.org/schema/beans/spring-task-4.0.xsd
    spring-tool-4.0.xsd 用于集成 Spring 工具 http://www.springframework.org/schema/tool http://www.springframework.org/schema/beans/spring-tool-4.0.xsd

    1 装配 Bean

    假设有这样的一个 Bean 配置:

    <bean id="people" class="net.deniro.spring4.IoC.People"/>
    

    Spring Ioc 容器中的一个 Bean 对应于配置文件中的一个 <bean>

    • id:Bean 的名称,可以通过容器的 getBean(id) 获得这个 Bean, 它起到定位查找的作用。
    • class:Bean 对应的实现类。

    2 Bean 命名规范

    id 属性在 IoC 容器中必须是唯一的,而且 id 的命名要满足 XML 对 id 属性命名规范:必须以字母开头,后面可以是字母 、数字 、连字符 、下划线 、句号 、冒号等完整结束符号,逗号与空格等非完整结束符号是非法的。

    id 和 name 都可以指定多个名字,名字之间可用逗号、分号或空格进行分隔:

     <bean id="people2,people3" class="net.deniro.spring4.IoC.People"/>
    

    不允许出现多个具有相同 id 的 <bean>,但允许出现多个具有相同 name 的 <bean>,通过 getBean(beanName) 获取 Bean 时,将返回最后声明的 Bean,因为它覆盖了前面同名的 Bean。
    为了避免出现 Bean 被覆盖的问题,建议尽量使用 id 来命名 Bean。

    如果 id 与 name 都未指定,那么 Spring 把全限定类名作为这个 Bean 的名称。如果存在多个实现类相同的匿名 <bean>,形如:

     <bean class="net.deniro.spring4.IoC.People"/>
     <bean class="net.deniro.spring4.IoC.People"/>
    

    那么,第一个 Bean 使用 getBean("net.deniro.spring4.IoC.People") 获取;第二个Bean 使用 getBean("net.deniro.spring4.IoC.People#1") 获取,以此类推。

    相关文章

      网友评论

        本文标题:说说在 Spring 中如何基于 XML 进行配置

        本文链接:https://www.haomeiwen.com/subject/zejglftx.html