原文链接:http://blog.csdn.net/achilles12345/article/details/41789527

----------------------------------------------------------------------------------------------

作为一个分布式服务治理框架,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是如何“插入”到spring框架中的相关推荐

  1. 在Spring框架中使用SQL存储过程

    Spring框架也支持对SQL存储过程的调用,SQL存储过程是一组预先定义好的SQL语句,并存储到数据库管理系统中,外部程序可以直接调用执行.本课主要讨论在Spring框架中应用程序如何调用MySQL ...

  2. Spring框架中的设计模式(一)

    设计模式有助于遵循良好的编程实践.作为最流行的Web框架之一的Spring框架也使用其中的一些. 本文将介绍Spring Framework中使用的设计模式.这是5篇专题文章的第一部分.这次我们将发现 ...

  3. 在Spring 框架中如何更有效的使用JDBC?

    使用Spring JDBC 框架,资源管理以及错误处理的代价都会减轻.开发人员只需通过statements 和queries 语句从数据库中存取数据.Spring 框架中通过使用模板类能更有效的使用J ...

  4. 理解Spring框架中Bean的作用域

    本篇介绍Spring Bean实例的作用范围,Spring Bean实例的作用范围由配置项scope限定.通过本篇的学习,可以达成如下目标. ● 应用scope配置项配置Bean的作用域 ● 应用单例 ...

  5. Spring框架中的控制反转和依赖注入

    控制反转: 控制反转是用来降低代码之间的耦合度的,基本思想就是借助"第三方"实现具有依赖对象的解耦. 为什么需要控制反转,因为项目中对象或多或少存在耦合.控制反转的关键在于Ioc容 ...

  6. Spring框架中提取list集合类型属性注入

    提取list集合类型属性注入 前言 引入名称空间 编写`xml`配置文件 运行结果 前言 对于某一个类型属性通用性较高的情况下,可以单独的提取出来,给需要的bean进行引用. 有关类的创建见<S ...

  7. Spring框架中集合属性为对象的注入方法

    Spring框架中集合属性为对象的注入方法 前言 创建基础类 创建`Course`类 编写XML配置文件 创建测试类 执行结果 前言 在集合的属性注入中,如果注入属性为普通类型(String.int) ...

  8. Spring框架中XML配置文件注入集合(数组、LIST、MAP、SET)属性

    Spring框架中XML配置文件注入集合属性 前言 创建测试类与属性 配置XML配置文件 建立调用类 调用结果 前言 某些类的属性是可能是集合,包括:数组.LIST.MAP.SET等集合,在Sprin ...

  9. Spring框架中级联赋值(外部属性注入)以及内部属性注入

    Spring框架中级联赋值(外部属性注入)以及内部属性注入 前言 级联赋值 1.对上述外部`Bean`配置文件进行修改: 2.级联赋值第二种写法 内部`bean`属性注入 前言 Spring框架中存在 ...

最新文章

  1. 局部和匿名类型作模板实参
  2. [蓝牙] 6、基于nRF51822的蓝牙心率计工程消息流Log分析(详细)
  3. 数据可视化的利器-Seaborn简易入门
  4. 事件触发控制_SystemVerilog线程控制与通信
  5. mybatis学习(5):安装 SQL Server installsharewowdir命令值无效的问题
  6. [sqlite] android create db in SD card
  7. 20165313 课程总结
  8. SpringMVC+Vue项目班级管理系统
  9. java解析md文件_md格式详解
  10. 电子邮箱官网地址是什么,企业邮箱官网地址登录入口讲解
  11. 2019年的读书印记
  12. GuzzleHttp使用
  13. Python 实现图片裁剪(附代码) | Python工具
  14. stm32 Cubel开发教程
  15. mongodb学习之:mongo安装以及远程访问
  16. Error: The apk for your currently selected variant (app-release-unsigned.apk) is not signed. Please
  17. 16春季计算机应用基础,西交16春季《计算机应用基础》在线作业及答案
  18. 算法之动态规划,问题三:0 1 背包问题
  19. Shader学习2——兰伯特
  20. 作为Java开发程序员,中科创达java应届生薪资

热门文章

  1. java构造方法赋值内存图_java 面向对象(九):类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念...
  2. java fangfa_daicanfangfa java中的方法 刚入门的分不清带参方法的作用和用处 这个可以详细的讲解如何使用带参方法 - 下载 - 搜珍网...
  3. C语言的关键字和详细介绍
  4. java二维数组的常见初始化
  5. HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?
  6. python 远程控制_用 Python 远程控制你的电脑
  7. 软件工程(Rational统一过程)
  8. 苏大计算机学院在哪,苏州大学和扬州大学都位于江苏,这两所大学,哪一所的实力更强?...
  9. c标签判断true false jsp_Java学习知识点:小白如何掌握JSP技术?
  10. 语句拼接_Linux 进阶语句