dubbo源码解读

2019-01-24  本文已影响0人  cjxz

dubbo基于spring上面进行扩展。可以通过spring配置来申明dubbo接口。在dubbo的包里面有个dubbo-config里面是dubbo解析配置文件的包。在使用时会导入dubbo的命名空间

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://dubbo.apache.org/schema/dubbo 
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

可以查看dubbo.xsd文件
dubbo解析命名空间的类
org.apache.dubbo.config.spring.schema.DubboNamespaceHandler
作用就是将我们定义的消费者或者服务提供者的XML映射成具体的配置类

registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));
        registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));
        registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));
        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));
        registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));
        registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));
        registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));
        registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));
        registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));
        registerBeanDefinitionParser("annotation", new AnnotationBeanDefinitionParser());
加载完毕,会创建一个map,保存注册后的各个beanclass

重要的入口类ServiceBean

org.apache.dubbo.config.spring.ServiceBean 
public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener<ContextRefreshedEvent>, BeanNameAware {

实现了好多spring的接口。比如InitializingBean,那么就有初始化方法需要实现afterPropertiesSet()
发现重要方法

if (!isDelay()) {
    export();
}

doExportUrls()

上一篇 下一篇

猜你喜欢

热点阅读