dubbo源码分析8——服务暴露概述
从上文中可知,com.alibaba.dubbo.config.spring.ServiceBean类是负责解析<dubbo:service/>的配置的,下面是它的类图
从类图上可知它继承了ServiceConfig类,并实现了5个接口,在这5个接口中有两个接口与服务暴露有关InitializingBean接口和ApplicationListener接口,其中InitializingBean是进行bean的初始化工作的,ApplicationListener接口是监听spring容器事件的。先通过outline视图观察一下ServiceBean类:
从outline视图中可以发现,ServiceBean类并没做什么保存配置的工作,保存配置的工作主要是由它的父类在承担。结合源码可以看到ServiceBean类的真正作用是两个:
1. 对服务Bean的实例进行初始化,详见afterPropertiesSet()方法
2. 暴露服务,详见onApplicationEvent(ApplicationEvent event)方法,这个方法的触发时机是在spring的IOC容器完成所有的bean的实例化和初始化工作之后,会发出一个ContextRefreshedEvent类型的事件,如果我们关心该类型事件则实现ApplicationListener接口就可以,IOC容器就会在恰当的时机去调用我们实现的ApplicationListener接口中的代码逻辑, 而dubbo就是利用这个机制和时机完成了每个服务接口的暴露工作。
下文将对ServiceBean的源码进行详细分析。
dubbo源码分析8——服务暴露概述的更多相关文章
- dubbo源码分析10——服务暴露1_export()方法分析
ServiceConfig类中的export()方法,是dubbo服务暴露的入口方法,被触发的时机有两个: 1. spring容器初始化完成所有的bean实例后,通过事件机制触发 2. 实现Initi ...
- dubbo源码分析12——服务暴露3_doExportUrls()方法分析
本文紧接上文,doExportUrls()方法位于ServiceConfig类中,代码入口如下: private void doExportUrls() { List<URL> regis ...
- dubbo源码分析11——服务暴露2_doExport()方法分析
protected synchronized void doExport() { //如果是已经解除暴露的接口则抛出异常 if (unexported) { throw new IllegalStat ...
- dubbo源码分析13——服务本地暴露 exportLocal(url)
dubbo服务的本地暴露,显然是针对当服务消费者和服务提供者都在同一个jvm的进程内这种场景 .通常是发生在服务之间的调用的情况下.一种情况就是A服务调用B服务的情况,如果A服务和B服务都是在一个线程 ...
- Dubbo源码分析系列---服务的发布
摘要: 通过解析配置文件,将xml定义的Bean解析并实例化,(涉及重要的类:ServiceBean.RegistryConfig[注册中心配置].ProtocolConfig[协议配置].Appli ...
- Dubbo 源码分析 - 服务导出
1.服务导出过程 本篇文章,我们来研究一下 Dubbo 导出服务的过程.Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑.整个逻辑大致可 ...
- dubbo源码分析2-reference bean发起服务方法调用
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
- Dubbo 源码分析 - 集群容错之 Cluster
1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供 ...
随机推荐
- MySQL8常见客户端和启动相关参数
MySQL8常见客户端和启动相关参数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL常见的客户端 1>.使用MySQL服务自带的mysql连接工具 2>. ...
- java io系列26之 RandomAccessFile
本文主要介绍 RandomAccessFile. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_26.html 更多内容请参考:java io系列0 ...
- vue实现筛选功能,文字选中变色
<template> <Poptip trigger="hover" title="Title" content="content& ...
- Golang入门教程(十一)beego 框架之RESTful Controller 路由
官方文档:https://beego.me/docs/mvc/controller/router.md 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路 ...
- Web 学习笔记(一)百度统计
一.百度统计是什么? 百度统计是百度推出的一款免费的专业网站流量分析工具,能够告诉用户访客是如何找到并浏览用户的网站,在网站上做了些什么,有了这些信息,可以帮助用户改善访客在用户的网站上的使用体验,不 ...
- 错误 3 未找到类型“sdk:Label”。请确保不缺少程序集引用并且已生成所有引用的程序集。
错误: 错误 3 未找到类型“sdk:Label”.请确保不缺少程序集引用并且已生成所有引用的程序集. 错误 1 命名空间“http://schemas.microsoft.com/winfx/200 ...
- 【由浅入深理解java集合】(二)——集合 Set
上一篇文章介绍了Set集合的通用知识.Set集合中包含了三个比较重要的实现类:HashSet.TreeSet和EnumSet.本篇文章将重点介绍这三个类. 一.HashSet类 HashSet简介 H ...
- CSS3 transform-origin 属性
<!DOCTYPE html> <html> <head> <style> #div1 { position: relative; height: 20 ...
- 使用js请求Servlet时的路径
项目结构如下: 全是web的html页面 js部分重要代码: function ajaxValidate() { var flag=false; $.ajax({ "url":&q ...
- nginx默认80端口被System占用,造成nginx启动报错的解决方案
今天启动window上的nginx总是报错 错误信息是bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socke ...