dubbo服务暴露底层源码解析

参考网址:

https://blog.csdn.net/peace_hehe/article/details/79288053

https://blog.csdn.net/aoomiao/article/details/83503223

springboot结合dubbo中要将服务进行暴露的话得先解析提供者的xml配置,至于springboot项目在启动时指定读取解析xml不在本文说明范围内

在com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler中指定解析器,在解析到dubbo标签时就会去调用该解析器将每个暴露服务的配置组装成bean对象

 dubbo服务暴露底层源码解析

具体的解析过程方法在,把传进来的标签element里的属性(如id、interface、class等)设置给beanDefinition ,根据beanClass(ServiceBean)获取set方法放进beanDefinition记录着

com.alibaba.dubbo.config.spring.schema.DubboBeanDefinitionParser#parse()

 dubbo服务暴露底层源码解析

这里beanDefinition的定义是记录着需要实例化bean的各种信息,相当于模子,有了模子就可以实例化相应的bean出来,返回的beanDefinition最终会放到spring一个beanDefinitionMap<String, BeanDefinition>中,其中key为xml定义的id

org.springframework.beans.factory.support.DefaultListableBeanFactory

,当初次调用容器的getBean(beanName)时就会通过beanDefinitionMap获取BeanDefinition去实例化bean,在这里将会去实例化ServiceBean实例,而ServiceBean类作为监听器实现了

ApplicationListener<ContextRefreshedEvent>接口,在容器启动触发事件调用监听器的执行方法。由于ServiceBean也继承了ServiceConfig,调用了父类的暴露函数,将服务的相关信息保存在特定对象和发送给注册中心中。

dubbo服务暴露底层源码解析

 

上一篇:Spring源码系列(二)BeanDefinition(一)


下一篇:spring学习记录(二)