作为一个分布式服务关系框架,dubbo做的非常好,在业界使用很光,所以最近研究了下这个框架。任何框架要研究其原理最好的办法之一就是沿着其运行流程进行追踪,这样就能从上到下,从粗到细对一个系统进行了解。今天,我们要说明的问题就是dubbo如何启动的。
dubbo是基于Spring进行开发的,而且扩展了Spring的XML schema和注解标签,其实这里也就是整个dubbo的切入点。dubbo除去依赖其他的第三方框架外,整个框架只有一个jar包,可谓是精致。在这个jar包的NET-INF目录下有两个文件:spring.handlers和spring.schemas。其中spring.schemas中定义的就是扩展的spring配置标签,而且spring.handlers中定义的就是这些schema的处理类,就是这个类将dubbo组件“插入”到spring这个平台里的。(关于如何自定义spring配置的schema,网上资料很多,这里只简单概括)Spring在启动的时候会扫描MET-INF下所有的spring.handlers等文件,找到其中的标签处理类,并运行其init方法。
这里要插个知识点“spring的启动过程”。spring启动过程,从宏观角度来讲分为两个阶段。第一个阶段完成spring配置文件的解析,或者spring注解的解析最终将这些配置或者注解解析成BeanDefinition对象,然后进入下一个阶段,比如我们经常在spring配置文件中使用的占位符替换工作就是在这个阶段完成的。在第二个阶段中,spring用之前解析好的BeanDefinition对象来完成bean的初始化和组装工作,比如我们使用spring事务时的事务proxy就是这个阶段完成注入到service对象中的。
在这个init方法中,dubbo将自己的标签(application,module,registry,monitor,provider,consumer,protocol,service,reference)处理类注册到spring中,而这些类会完成对自己所负责的标签的解析工作,将标签最终转换为bean的描述对象BeanDefinition并返回给spring,而spring拿到这些标签对象完成bean的初始化、依赖注入(比如注入对RMI端的proxy对象)。
这就是dubbo的宏观启动流程,这个对于理解dubbo框架的原理能起到促进作用,网上也没有明确的文章进行说明,这里做个补充。希望能帮大家解决一些问题。
原文:
相关推荐
本文采用Dubbo与Zookeeper、spring框架的整合
spring_dubbo spring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_...
dubbo+zookeeper+spring -demo 分布式系统 demo
此框架为Spring4.1.6+mybatis3.2.8+dubbo2.5.3的框架源码以及依赖的包
spring dubbo的简单demo,开发工具为idea,生产者消费者模式,要安装zookeeper和dubbo-admin
实现Springcloud向dubbo项目的接口调用。 FeignToDubbo-starter模块负责利用Feign将底层的Http协议转化为dubbo协议,供SpringCloud项目使用。引入FeignToDubbo-starter后会引入dubbo的依赖,使用注解DubboRefence...
maven构建的spring分布式服务,使用dubbo分布式部署,压缩包包含两个eclipse工程(spring-client和spring-server),解压后在eclipse中直接运行(注意:是maven工程),压缩包也包含dubbo-admin和zookeeper,本工程...
dubbo+zookeeper+spring 注解式开发demo,使用注解方式利用dubbo开发的分布式例子
Dubbo框架和SSM框架搭建。
这是一个学习zookeeper+dubbo+spring的代码例子,一个maven工程
Dubbo 配置文件是如何加载到 Spring 中的? 说说核心的配置有哪些? Dubbo 超时设置有哪些方式? 服务调用超时会怎么样? 通信协议 Dubbo 使用的是什么通信框架? Dubbo 支持哪些协议,它们的优缺点有哪些? 设计模式...
spring-boot-starter-dubbo是 dubbo 的 spring boot starter,它可以无缝地对接 spring boot和dubbo ,方便大家使用 dubbo 组件。 spring-boot-starter-dubbo 支持的 jdk 版本为 1.6 或者 1.6 。 spring-boot-...
借鉴官网的一个Demo,Dubbo+Zookeeper+Spring整合,一个简单的Demo源码
基于SpringCloud的微服务的商城实战案例-simplemall 基于Dubbo的微服务两套开发基础框架,开箱即可。
dubbo+zookeeper+spring demo
压缩包内包含搭建简单的Dubbo+Zookeeper+Spring项目所需的全部jar包,在自己写的项目中拿出来的,保证可以使用。
Spring+Dubbo 实例
dubbo+spring+mybatis+redis 完美整合,初学者可基于此工程迅速搭建个性化服务
基于SpringBoot-Dubbo的微服务开发基础框架,包括采用SpringBoot 的Web API快速开框架,搭建框架,开箱即用。
Java 整合dubbo,zookeeper,springMVC框架参考文档,框架整合