dubbo的组成原理-自定义标签Schema

dubbo在spring中的配置这里就不多说了,各位看官都不是小白。

首先dubbo为我们提供的很多简单易用的标签,方便的实现了服务的暴露和调用

<?xml version="1.0" encoding="UTF-8"?>

    
    
    
    
    
    

 
 
那么这些标签是哪里定义的呢?
先来简单介绍一下基于Spring可扩展Schema提供自定义配置支持
 
 

在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤:

  • 设计配置属性和JavaBean
  • 编写XSD文件
  • 编写NamespaceHandler和BeanDefinitionParser完成解析工作
  • 编写spring.handlers和spring.schemas串联起所有部件
  • 在Bean文件中应用
看到这里,我们打开duubo jar包的源码就不会觉得奇怪了
 
 
完成解析工作,会用到NamespaceHandler和BeanDefinitionParser这两个概念。具体说来NamespaceHandler会根据schema和节点名找到某个BeanDefinitionParser,然后由BeanDefinitionParser完成具体的解析工作。因此需要分别完成NamespaceHandler和BeanDefinitionParser的实现类,Spring提供了默认实现类NamespaceHandlerSupport和AbstractSingleBeanDefinitionParser,简单的方式就是去继承这两个类。
DubboNamespaceHandler 实现了父类中的init方法,并定义了自己的DubboBeanDefinitionParser。最终将其转换成BeanDefinition,提供spring容器实例化使用
 
 
 
 
 
 

发布了20 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/hdu09075340/article/details/70886359