坚持一下,把源码看完,勤奋一点,不要在懒惰了,你已经落下别人很多了
环境配置:
jdk 1.7.0.17
dubbo 2.5.x
myeclipse 2014
idea 2017
new ClassPathXmlApplicationContext("provider.xml"); 在spring解析配置文件的时候,遇到dubbo标签 比如<dubbo :registry />等等,根据spring的handler的加载机制(就是扫描jar包下的META-INFO文件夹下的spring.handlers文件),找到dubbo的标签处理类DubboNamespaceHandler
DubboNamespaceHandler
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 AnnotationBeanDefinitionParser()); }
通过init方法也就不难看出,基本上囊括了dubbo的所有配置,由此理出下边关于config的结构图
Config结构图
由于ServiceBean和ReferenceBean 的结构层次最深,所以我们重点关照一下这两个类,其实其他的Config只是把xmlfeng封装为对应的config对象,额外的处理也不是很多,但是ServiceBean 涉及到 服务暴露 、ReferenceBean涉及到服务引用,所以这两个类可以称之为dubbo配置的核心处理类。