盘点Spring/Boot的那些常用扩展点( 八 )


也就说 , 这个标签是可以扩展的 。
话不多说 , 来个扩展
接下来自定义命名空间  , 总共分为3步 。
第一步:定义一个xsd文件
如下:
xmlns:xsd=“”
=“”>

这个xsd文件来指明这个命名空间下有哪些标签和属性 。这里我只指定了一个标签  , 标签里面有个class的属性 , 然后这个标签的目的就是将class属性指定的Bean的类型 , 注入到容器中 , 作用跟的 标签的作用是一样的 。
xsd文件没有需要放的固定的位置 , 这里我放到 META-INF 目录下
第二步:解析这个命名空间
解析命名空间很简单 , 都有配套的东西–接口 , 只要实现这个接口就行了 。但一般我们不直接实现接口 , 我们可以继承 ort 类 , 这个类实现了接口 。
class erort {
@Overridepublic void init() {//注册解析 mybean 标签的解析器registerBeanDefinitionParser("mybean", new SanYouBeanDefinitionParser());}private static class SanYouBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {@Overrideprotected boolean shouldGenerateId() {return true;}@Overrideprotected String getBeanClassName(Element element) {return element.getAttribute("class");}}
}
er的作用就是将命名空间中的这个标签读出来 , 拿到class的属性 , 然后将这个class属性指定的class类型注入到容器中 , 至于注册这个环节的代码 , 都交给了的父类来做了 。
第三步:创建并配置.和.文件
先创建.和.文件
.文件内容
通过.配置文件 , 就知道命名空间应该找er进行解析
.文内容
.配置xsd文件的路径
文件都有了 , 只需要放到下的META-INF文件夹就行了 。
xsd、.、.文件
到这里 , 就完成了扩展 , 接下来进行测试
测试
先构建一个.xml文件 , 放到目录下

再写个测试类
class{
public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");applicationContext.refresh();User user = applicationContext.getBean(User.class);System.out.println(user);}
}
运行结果:
1
com....User@
成功获取到User这个对象 , 说明自定义标签生效了 。
内置命名空间的扩展
的实现
通过接口的这些实现类的命名就可以看出来有哪些扩展和这些扩展的作用 , 比如有处理aop的 , 有处理mvc的等等之类的 。
开源框架对命名空间的扩展
1、的扩展
的实现
这个就是来扫描指定路径的接口的 , 处理 scan 标签 , 跟@注解的作用是一样的 。
2、dubbo的扩展
使用dubbo可能写过如下的配置
1
这个dubbo命名空间肯定就是扩展的的 , 也有对应的dubbo实现的 。
r
不得不说 , dubbo解析的标签可真的多啊 , 不过功能也是真的多 。
总结
到这 , 本文就接近尾声了 , 这里画两张图来总结一下本文讲了的哪些扩展点 。
整体
启动扩展点
通过学习的这些扩展点 , 既可以帮助我们应对日常的开发 , 还可以帮助我们更好地看懂的源码 。