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对象

 

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

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

 

这里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调用父类的暴露函数,将服务的相关信息保存在特定对象和发送给注册中心中。

 

相关文章

在网络请求时,总会有各种异常情况出现,我们需要提前处理这...
作者:宇曾背景软件技术的发展历史,从单体的应用,逐渐演进...
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我...
 一个软件开发人员,工作到了一定的年限(一般是3、4年左右...
当一个服务调用另一个远程服务出现错误时的外观Dubbo提供了多...
最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用...