dubbo是如何“插入”到spring框架中的

原文链接: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框架的原理能起到促进作用,网上也没有明确的文章进行说明,这里做个补充。希望能帮大家解决一些问题。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle数据库抽取到gp,Oracle迁移数据到Greenplum

端表结构SQL> select dbms_metadata.get_ddl(TABLE,TAB_ORA,ZWC) from dual;CREATE TABLE "ZWC"."TAB_ORA"( "ID" NUMBER,"OWNER" VARCHAR2(30),"NAME" VARCHAR2(128),CONSTRAINT "PK_ID" PRIMARY KEY (&qu…

postgresql 插入 时间戳_数据也玩躲猫猫?PostgreSQL中别人提交的数据,我为什么看不到?...

原创: Aken DB印象文章链接:https://mp.weixin.qq.com/s/OkJaWbzcXcJtzSCOFnqeXQ文章作为DB的学习体会,若有错误欢迎指导。一、环境介绍操作系统:CentOS Linux release 7.6.1810 (Core) DB版本:PostgreSQL -11.5 on x8…

VMware打卡虚拟机提示“此虚拟机可能已被复制或移动”

“我已移动虚拟机” //表示打开后的虚拟的网卡的mac地址不变,如果复制本地的,同时开机在一个vmnet可能造成冲突。 “我已复制虚拟机” //表示打开后的虚拟机的网卡的物理地址是新生成的,建议不懂的就选这个。 “取消” …

埋坑一: vue中子组件调用兄弟组件方法

小计: 开发中遇到子组件需要调用兄弟组件中的方法,如下写个小demo记录下心得,如果你有好的方法,请到评论区域指教 父组件示例代码: 组件功能解析: 通过$emit获取子组件事件,通过$ref调用子组件中…

nioqrc oracle,程序停在 readnocancel () from -lib-tls-libpthread.so.0

程序停在 readnocancel () from -lib-tls-libpthread.so.0(2012-04-10 23:20:56)标签:程序杂谈程序停在 __read_nocancel () from /lib/tls/libpthread.so.0我在 IBMBladeCenter JS21机器 (计算机集群)上 利用 MPI C 编程, 但出现了一些奇怪的现象。那就…

synchronized 方法 导致插入数据插不进_synchronized 原理知多少

本文转载于SegmentFault社区作者:ytaosynchronized是 Java 编程中的一个重要的关键字,也是多线程编程中不可或缺的一员。本文就对它的使用和锁的一些重要概念进行分析。使用及原理synchronized 是一个重量级锁,它主要实现同步操作&#xff0c…

SpringMVC源码解析(四)——请求处理

2019独角兽企业重金招聘Python工程师标准>>> 前言 这一篇,将着手介绍一次请求的处理。用到了 HandlerMapping、HandlerAdapter 知识,如果遇到不是太了解,可以回顾下。 源码分析 其实 DispatcherServlet 也只是 Servlet 的一个实现…

oracle中where中使用函数,Oracle 尽量避免在 SQL语句的WHERE子句中使用函数

-- Start在 WHERE 子句中应该尽量避免在列上使用函数,因为这样做会使该列上的索引失效,影响SQL 语句的性能。即使该列上没有索引,也应该避免在列上使用函数。考虑下面的情况:CREATE TABLE EMPLOYEE(NAME VARCHAR2(20) NOT NULL,--…

求近似数最值_干货|初中数学《数的开方》知识点梳理

本章内容课标的要求● 1.了解平方根、算术平方根、立方根的概念,会用根号表示数的平方根、算术平方根、立方根。● 2.了解乘方与开方互为逆运算,会用平方运算求百以内整数的平方根,会用立方运算会求百以内整数(对应的负整数)的立方根&#xf…

第三章(续)

目录 第二章 灰度变换与空间滤波(续)直方图处理与函数绘图生成直方图直方图均衡直方图匹配空间滤波线性空间滤波非线性空间滤波图像处理工具箱的标准滤波器线性空间滤波器非线性空间滤波器第二章 灰度变换与空间滤波(续) 直方图处理与函数绘图 生成直方图 应用函数 imhist 语法…

Linux Mysql 安装方法

1、检查是否有安装 [rootJDDB mysql]# yum list installed | grep mysql mysql-community-client.x86_64 5.6.39-2.el7 mysql56-community mysql-community-common.x86_64 5.6.39-2.el7 mysql56-community mysql-community…

oracle 经纬度算距离,根据经纬度诀别用java和Oracle存储过程计算两点距离

根据经纬度分别用java和Oracle存储过程计算两点距离create or replace procedure SP_GET_DISTANCE(cx in number,cy in number,sx in number, sy in number,distance out varchar2)isd number;x number;y number;r number;pi number;begin--开始计算r:6371229;--地球半径pi:3.1…

Kafka集群安装--测试--关闭

一、前提 1、kafka安装包下载:http://kafka.apache.org/downloads 2、jdk已安装 3、scala已安装 4、zookeeper集群已安装并运行二、步骤 1、对kafka_2.9.2-0.8.1.tgz进行解压缩:tar -zxvf kafka_2.9.2-0.8.1.tgz。2、对kafka目录进行改名:mv …

Java中的工厂模式

设计模式遵循原则 开闭原则:对扩展开放,对修改关闭里氏代换原则:只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被覆用。而衍生类也能够在基类的基础上增加新的行为依赖倒转原则:开闭…

python的底层实现_Python底层封装实现方法详解

这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下事实上,python封装特性的实现纯属“投机取巧”,之所以类对象无法直接调用私有方法和属性&a…

php 附近的距离,PHP查询附近的人及其距离的实现方法_PHP

本文实例讲述了PHP查询附近的人及其距离的实现方法。分享给大家供大家参考,具体如下:array(lat>$lat $dlat,lng>$lng-$dlng),right-top>array(lat>$lat $dlat, lng>$lng $dlng),left-bottom>array(lat>$lat - $dlat, lng>$ln…

统计指定目录下的视频时长

package time;import java.io.File;import org.apache.log4j.Logger;import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.MultimediaInfo;public class Test2 {/* 支持的后缀 */private static final Str…

怎么在cmd中运行python脚本_cmd中运行python脚本智能使用流程

(此时的ScaleMode自动变Vbuser)更有趣的是用来计算字串高、宽的TextHeight/TextWidth也变成以座标0-100的方式来表现了On Error Resume NextSet outstreemWscript.stdoutIf (LCase(Right(Wscript.fullname,11))"Wscript.exe") ThenSet objShellWscript.CreateObject(…

世界时钟 软件_Clocker for Mac(世界时钟软件)

Clocker for Mac是一款Mac平台上免费的世界时钟工具,方便我们查看世界各地的时间,它是开源免费的,完全没有广告。包括数百个时区,支持24小时制或AM / PM,macz提供Clocker mac免费版,欢迎前来下载&#xff0…

Mac 设置 NDK

2019独角兽企业重金招聘Python工程师标准>>> 1、首先查看我自己的android studio ,找到以下路径 如上图,打开一个 AS 项目,file - project structure 这是我的3 个路径 Ndk /Users/dhbm/Library/Android/sdk/ndk-bundle Sdk /User…