dubbo源码解析(一)

1. 在dubbo包下/META-INF/spring.handlers这个文件中定义了。在spring加载时首先会扫描这个配置文件
文件内容如下
http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

引用了一个类DubboNamespaceHandler,这个类实现了NamespaceHandlerSupport这个接口
实现了这个接口有什么用呢?
以后再看

2. spring在加载时会调用NamespaceHandlerSupport#init()这个方法

 

public void init() {
        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 DubboBeanDefinitionParser(AnnotationBean.class, true));
    }

这个方法根据配置文件中各个配置项,将对应的配置转换为对应的配置信息

这里都new 了DubboBeanDefinitionParser这个类,这个类有两个构造参数一个是配置类,另外一个是是否required

这个类因为实现了BeanDefinitionParser接口,所以实现了接口的parse方法

public BeanDefinition parse(Element element, ParserContext parserContext)

这个方法会在spring初始化的时候被调用,具体什么时候调用要看springbean的生命周期了

在这个方法内注册了对应的beanClass,,将对应的beanClass注册到spring容器中。

这样就可以在其它地方对bean进行调用了。

 

posted on 2018-10-25 16:35  liguangming  阅读(205)  评论(0编辑  收藏  举报

导航