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的成对映射。