千家信息网

dubbo的初始化解析bean的过程是怎样的

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"dubbo的初始化解析bean的过程是怎样的",在日常操作中,相信很多人在dubbo的初始化解析bean的过程是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2026年11月02日dubbo的初始化解析bean的过程是怎样的

这篇文章主要介绍"dubbo的初始化解析bean的过程是怎样的",在日常操作中,相信很多人在dubbo的初始化解析bean的过程是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"dubbo的初始化解析bean的过程是怎样的"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

解析服务

基于dubbo.jar内的META-INF/spring.handlers配置,Spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler。

所有dubbo的标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。

在ServiceConfig.export()或ReferenceConfig.get()初始化时,将Bean对象转换URL格式,所有Bean属性转成URL的参数。

然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露或引用。

dubbo服务的暴露调用的是:ServiceConfig.export()代码如下:

com.alibaba.dubbo.config.ServiceConfig#export

//暴露服务

public synchronized void export() {

if (provider != null) {

if (export == null) {

export = provider.getExport();

}

if (delay == null) {

delay = provider.getDelay();

}

}

if (export != null && ! export.booleanValue()) {

return;

}

if (delay != null && delay > 0) {

Thread thread = new Thread(new Runnable() {

public void run() {

try {

Thread.sleep(delay);

} catch (Throwable e) {

}

doExport();

}

});

thread.setDaemon(true);

thread.setName("DelayExportServiceThread");

thread.start();

} else {

doExport();

}

}

在查看export调用链时,可看到2个地方调用了该方法:

1、com.alibaba.dubbo.config.spring.AnnotationBean#postProcessAfterInitialization:注解的方式暴露时

2、com.alibaba.dubbo.config.spring.ServiceBean#afterPropertiesSet:以spring配置文件暴露时

AnnotationBean类的继承关系

public class AnnotationBean extends AbstractConfig implements DisposableBean, BeanFactoryPostProcessor, BeanPostProcessor, ApplicationContextAware {

AnnotationBean实现了spring bean和context相关的接口,在spring扫描完注解类,并解析完时调用 export()方法对服务进行暴露

ServiceBean

public class ServiceBean extends ServiceConfig implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener, BeanNameAware {

在spring初始化解析bean完成,主要是在对spring标签的解析,bean的定义,bean的属性解析设值等完成后 进行 export()

因为dubbo是自己的自定义标签,所以对于bean的解析是 export 前最重要的部分,今天先不看服务的暴露,先看dubbo对于服务的解析,重要的两个类:

com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

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

以下为DubboNamespaceHandler代码,加上了我的注释(自己的理解)

public class DubboNamespaceHandler extends NamespaceHandlerSupport {

static {

/**

* 检索是否有重复的命名空间处理器

*/

Version.checkDuplicate(DubboNamespaceHandler.class);

}

public void init() {

/**

* 注册bean,真正负解析的是DubboBeanDefinitionParser

* DubboBeanDefinitionParser将解析所有的属性,并将属性值放入BeanDefinition

*/

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));

}

}

所有的解析工作都在 DubboBeanDefinitionParser 中;具体可以查看DubboBeanDefinitionParser

解析的最终目的是返回 RootBeanDefinition 对象,RootBeanDefinition包含了解析出来的关于bean的所有信息,注意在bean的解析完后其实只是spring将其转化成spring内部的一种抽象的数据对象结构,bean的创建(实例化)是第一次调用 getBean 时创建的。以上是dubbo对配置文件,服务定义的解析过程。后面再写dubbo服务的暴露。

到此,关于"dubbo的初始化解析bean的过程是怎样的"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

服务 过程 属性 对象 标签 学习 方法 配置 重要 代码 文件 更多 注解 空间 帮助 不同 实用 接下来 一对一 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 重生之互联网科技帝国 盈实互联网科技 互联网为科技 中国 科技 互联网 云电互联网科技 互联网 视角下的科技创新 互联网科技网站 重庆科技学院互联网 互联网金融科技公司干啥的 宝灵互联网科技有限公司 荆州市昕露互联网络科技有限公司 开一家科技互联网公司需要多少钱 上海科技产业互联网平台 山东子淼互联网科技有限公司 上海钢联属于互联网科技股吗 互联网科技包装股份有限公司上市 西安有哪些互联网高科技企业 普陀区互联网教育科技管理办法 马化腾互联网科技教学 互联网和科技创新 互联网科技会 滨湖区互联网智能科技产品供应 深圳市运趣互联网科技有限公司 以后互联网后是啥科技 互联网公司科技股 银川新华互联网科技学校联系电话 深圳市罗太互联网科技有限公司 北京军民互联网科技公司 重庆科技产业互联网有哪些
0