Dubbo源码分析之服务发布原理

本文深入探讨Dubbo中Spring扩展的实现原理,解析Dubbo如何通过自定义NamespaceHandler和BeanDefinitionParser完成服务配置的解析,重点关注ServiceBean和ReferenceBean在服务发布与调用中的作用。
摘要由CSDN通过智能技术生成

 

Dubbo 的接入实现

Dubbo spring 扩展就是使用 spring 的自定义类型,所以同样也有 NamespaceHandlerBeanDefinitionParser。而

NamespaceHandler DubboNamespaceHandler

BeanDefinitionParser 全部都使用了 DubboBeanDefinitionParser,如果我们想看 dubbo:service 的配置,就直接看

DubboBeanDefinitionParser(ServiceBean.class,true)

这个里面主要做了一件事,把不同的配置分别转化成 spring 容器中的 bean 对象

application 对应 ApplicationConfig

registry 对应 RegistryConfig

monitor 对应 MonitorConfig

provider 对应 ProviderConfig

consumer 对应 ConsumerConfig

我们仔细看,发现涉及到服务发布和服务调用的两个配置的解析,试用的是 ServiceBean referenceBean。并不是 config 结尾

的,这两个类稍微特殊些,当然他同时也继承了 ServiceConfig ReferenceConfig

registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));

registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));

DubboBeanDefinitionParser

这里面是实现具体配置文件解析的入口,它重写了 parse 方法,对 spring 的配置进行解析。我们关注一下 ServiceBean 的解析.

实际就是解析 dubbo:service 这个标签中对应的属性

else if (ServiceBean.class.equals(beanClass)) {

String className = element.getAttribute("class");

if (className != null && className.length() > 0) {

RootBeanDefinition classDefinition = new RootBeanDefinition();

classDefinition.setBeanClass(ReflectUtils.forName(className));

classDefinition.setLazyInit(false);

parseProperties(element.getChildNodes(), classDefinition);

beanDefinition.getPropertyValues().addPropertyValue("ref", new BeanDefinitionHolder(classDefin

ition, id + "Impl"));

}

}

ServiceBean 的实现

ServiceBean 这个类,分别实现了 InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener,

BeanNameAware, ApplicationEventPublisherAware

InitializingBean

接口为 bean 提供了初始化方法的方式,它只包括 afterPropertiesSet 方法,凡是继承该接口的类,在初始化 bean 的时候会执行

该方法。被重写的方法为 afterPropertiesSet

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值