读dubbo源码笔记(二)

第二回:
前面一回讲了dubbo扩展,这回来看 与spring的结合。
其实可以把这个当成一个spring自定义标签的经典范例

首先我们来看 实际用例

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" //注意这里
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd /*注意这里*/">

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="location" value="classpath:dubbo.properties" />
</bean>

<dubbo:application name="${dubbo.application.name}" owner="${dubbo.application.owner}" />

<dubbo:protocol name="dubbo" port="${dubbo.protocol.port}" heartbeat="180000" />

<dubbo:service id="registryServiceConfig" interface="com.alibaba.dubbo.registry.RegistryService" ref="registryService" registry="N/A" ondisconnect="disconnect" callbacks="1000">
<dubbo:method name="subscribe"><dubbo:argument index="1" callback="true" /></dubbo:method>
<dubbo:method name="unsubscribe"><dubbo:argument index="1" callback="false" /></dubbo:method>
</dubbo:service>

<bean id="registryService" class="com.alibaba.dubbo.registry.simple.SimpleRegistryService" />

</beans>

重点看 ”注意这里“ 。


步骤有如下几步阿

1.首先 继承 spring NamespaceHandlerSupport,然后每个节点 实现 spring BeanDefinitionParser
看dubbo与源码

DubboNamespaceHandler 继承 NamespaceHandlerSupport

public class DubboNamespaceHandler extends NamespaceHandlerSupport {

static {
Version.checkDuplicate(DubboNamespaceHandler.class);
}

public void init() {
registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.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));
}

}


DubboBeanDefinitionParser 实现 BeanDefinitionParser 这个太长不贴了

[color=red]
我们看到 对每一个节点的解析 dubbo用的是同一个 解析器,
为什么不分开呢,这段代码 太长,
坏味道。
[/color]

2.对标签的实现类写完之后,需要声明该handler。通过spring.handlers 文件进行声明:
所以 dubbo在 META-INF/spring.handlers 中有如下声明

http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler


3.规范定义XSD,(自己玩玩可以省略这个)
需要在 META-INF/spring.schemas 定义

http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd


打完收工。
Dubbo源码——源码环境搭建 I. 前言 好久没写博客了,Markdown都有些生疏了,惭愧! 终于又看起源码了,其实大论文还有好多没写,但我就是喜欢在该干些什么的时候跑去干点别的… 这次准备对Dubbo下手了,好好研究一下,预览了一下感觉看完会有很多收获,特征是对Spring源码的理解可能更加深入。挺想在中间件那种团队,高大上的软件设计,不被业务所拘泥。 II. 环境准备 系统:Mac OS IDEA 2018.3 (好久... 阅读详情

相关推荐

【软件使用】向日葵网络连接错误

一直报这个错误,尝试了修改版本无果,各种密码都正确,最后得出结轮是时间没有同步,查看代理是否更改了时间,做一下同步即可。

andeyeluguo的博客 7741

一个dubbo 异常

ParameterMessageInterpolator instead at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:102) ~[hibernate-validator-5.4.1.Final.jar:5.4.1.Final] at org.hibernat

flame1980的博客 370

【AI智能体】基于Coze 制作高质量PPT实战操作详解

基于Coze 制作高质量PPT实战操作详解

congge 6033

Dubbo进阶(十四)- Dubbo中参数回调 Callback 实现深究

Dubbo 中 参数回调Callback 到底有什么用? 到底是个怎么样的代码逻辑?

anLA_的专栏 3402

Dubbo

文章目录一 基础知识1 发展演变:RPC2、dubbo核心概念3、dubbo环境搭建3.1)、【windows】-安装zookeeper3.2)、【windows】-安装dubbo-admin管理控制台3.3)、【linux】-安装zookeeper**1、安装jdk**2、安装zookeeper3、开机启动zookeeper4、配置zookeeper3.4)、【linux】-安装dubbo-admin管理控制台4、dubbo-helloworld4.1)、提出需求4.2)、工程架构4.3)、创建模块4.4

努力充实,远方可期 796

dubbo学习之源码创建属于自己的dubbo-demo

上篇博文<一路踩坑构建Dubbo源码>谈论了如何本地构建dubbo源码,最近溪源也在努力的学习dubbo相关知识和机制,学习过程也可以称之苦不堪言吧。dubbo官网是入门学习资源重要之一;故溪源先分享中文官网:dubbo中文手册。 上网文章中也清晰地带着大家成功运行dubbo-demo;对于像溪源这样的新手接触dubbo,学习源码估计都很难找到入手的方法,溪源也是走了不少冤枉路,所以特此写了一篇入手dubbo源码的文章,希望能够帮助伙伴们降低时间浪费,少走弯路。溪源这篇带着大家在dubbo-de

增量星球 1万+

dubbo源码

后续核心加载代码如下,遍历strategies,循环调用loadDirectory,每个strategie都目录directory不一样,使得可以加载到META-INF/dubbo/internal/、META-INF/dubbo/、META-INF/services/下的文件,后续内容可以自己仔细看看,具体过程就是。上面三个路径加上类的全限定名,加载文件内容,内容是k,v形式, 将k,v解析出来放入map中。有个配置动态变更过程,我直接改,能监听到变化,这里有个很坑的地方,需要自己加上处理。

qq_48559883的博客 1201

Dubbo 源码

config 模块解析用户配置,通过 registry 模块发现服务地址,然后 cluster 模块根据容错和负载均衡策略选择一个地址,最后通过 rpc 模块封装的 protocol,使用 remoting 模块和 serialization 模块完成一次远程调用。而这一切的粘合剂,是 common 模块中的。

u011091936的博客 1209

源码全面解析 dubbo 服务暴露的来龙去脉

对于 Java 开发者而言,关于 dubbo ,我们一般当做黑盒来进行使用,不需要去打开这个黑盒。但随着目前程序员行业的发展,我们有必要打开这个黑盒,去探索其中的奥妙。本期 dubbo 源码解析系列文章,将带你领略 dubbo 源码的奥秘。本期源码文章吸收了之前 Spring、Kakfa、JUC源码文章的教训,将不再一行一行的带大家分析源码,我们将一些不重要的部分当做黑盒处理,以便我们更快、更有效的阅源码。虽然现在是互联网寒冬,但乾坤未定,你我皆是黑马!

爱敲代码的小黄 2797

Dubbo源码分析:全集整理

文章目录一、前言、目录1. 源码篇2. 衍生篇 一、前言 本文是Dubbo源码分析目录集整理,方便后续查找。 本文持续更新中。 、目录 1. 源码篇 2. 衍生篇

猫吻鱼的博客 4844

源码全面解析 dubbo 注解配置的来龙去脉

对于 Java 开发者而言,关于 dubbo ,我们一般当做黑盒来进行使用,不需要去打开这个黑盒。但随着目前程序员行业的发展,我们有必要打开这个黑盒,去探索其中的奥妙。本期 dubbo 源码解析系列文章,将带你领略 dubbo 源码的奥秘。本期源码文章吸收了之前 Spring、Kakfa、JUC源码文章的教训,将不再一行一行的带大家分析源码,我们将一些不重要的部分当做黑盒处理,以便我们更快、更有效的阅源码。虽然现在是互联网寒冬,但乾坤未定,你我皆是黑马!

爱敲代码的小黄 2442

Dubbo源码】SPI机制源码解析

文章目录一、什么是SPI机制、SPI机制源码分析ExtensionLoader静态类和静态方法new ExtensionLoader(type) 实例化扩展加载器如何创建自适应扩展实例如何获取自适应扩展的`Class`?如何自动创建`自适应扩展类`实例化之后,如何依赖注入?依赖注入的属性从哪里来加载当前`Type`中所有的扩展类加载文件中的具体实现类@Activate 注解的作用总结 先去看Du...

石臻说AI(szzdzhp001) 【原名 石臻臻的杂货铺】 4826

Dubbo源码-Exchangeclient初始化

本文主要针Dubbo消费端Exchange初始化过程,从dubbo源码角度进行解析。大家可以好好仔细一下本文。有疑问欢迎留言。接着说明,Dubbo源码最好是先对Spring源码有一定的了解。如果大家需要,我也可以针对Spring框架做一系列源码的解专栏。不过不用担心,如果需要Spring的源码知识,文章中也会进行Spring源码铺垫介绍的。如果内容中有没描述清楚的,或者大家在阅源代码有疑问的,欢迎留言,看到就会及时回复。

胖墩儿没腹肌 2709

源码真的有用吗?

源码真的有用吗?为什么源码写的还是一坨屎呢? 那么就来听听我源码这两年都了什么源码,真的有效果吗? 框架源码取路程 实习阶段,开始公司框架的源码 转正期间,开始Spring的源码 https://blog.csdn.net/u013076044/column/info/17942 一年左右开始Dubbo源码 https://blog.csdn.net/u013076044/c...

wuhulala的休息室 1470

Dubbo源码解析(

要使用Java SPI,需要遵循如下约定:1、当服务提供者提供了接口的一种具体实现后,在jar 包的META-INF/services 目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;2、接口实现类所在的jar包放在主程序的classpath 中;3、主程序通过java.util.ServiceLoder 动态装载实现模块,它通过扫描META-INF/services 目录下的配置文件找到实现类的全限定名,把类加载到JVM;

qq_40228720的博客 1172

Dubbo源码-dubbo的SPI机制

Dubbo的SPI机制,这篇文章,你一定有所收获。 Dubbo的SPI机制,这篇文章就够了。

胖墩儿没腹肌 1381

小白Dubbo源码01 - 从零开始

所有源码基于dubbo 2.7.1版本,请自行从github上下载源码。 1. 源码demo运行环境准备 从demo跑起,从dubbo的运行过程来解源码。目前大家熟悉可能还是xml配置的形式,所以选择xml版的demo。 通常实际项目中都是以zookeeper作为dubbo的注册中心的,因此修改demo的xml中关于注册中心的配置。 dubbo-provider.xml和dubbo-...

潘建南的博客 981

Dubbo源码-Dubbo心跳机制

上篇我们介绍了消费端DubboInvoker的调用流程解析本文主要针Dubbo消费端/服务端心跳机制,从dubbo源码角度进行解析。大家可以好好仔细一下本文。有疑问欢迎留言。接着说明,Dubbo源码最好是先对Spring源码有一定的了解。如果大家需要,我也可以针对Spring框架做一系列源码的解专栏。不过不用担心,如果需要Spring的源码知识,文章中也会进行Spring源码铺垫介绍的。如果内容中有没描述清楚的,或者大家在阅源代码有疑问的,欢迎留言,看到就会及时回复。

胖墩儿没腹肌 1707

Dubbo笔记衍生篇②:Dubbo SPI 原理

一、前言 Dubbo 为每一个功能点提供了一个SPI 扩展接口。而为了为了不加载不使用SPI 实例,Dubbo通过适配器模式和动态编译技术,加载指定的SPI 实现。 Dubbo适配器原理 、动态编译 众所周知,Java 程序想要运行首先需要将Java源代码编译成字节码文件,然后JVM把字节码文件加载到内存创建Class 对象后,使用Class对象创建实例。 正常情况下,我们是将所有源文件编译为字节码文件,然后由JVM统一加载,而动态编译则是在JVM进程运行时把源文件编译为字节码文件,然后使用字节码文件

猫吻鱼的博客 3907

STM32F407 串口空闲中断DMA接收+DMA发送中断

STM32F407 串口空闲中断DMA接收+DMA发送中断

上一篇: 读dubbo源码笔记(一)
下一篇: 读dubbo源码笔记(三)
wolfweis
博客等级 码龄14年 1粉丝 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值