dubbo源码学习(三)dubbo Spring容器context.start()流程分析

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在前面的文章中,介绍了SpringContainer的加载过程 该篇文章将主要讲解SpringContainer.start()方法中具体进行了什么操作,使得dubbo成功运行了起来

在前面的文章中,介绍了SpringContainer的加载过程

该篇文章将主要讲解SpringContainer.start()方法中具体进行了什么操作,使得dubbo成功运行了起来

如果这边文章帮助到你了,帮忙支付宝领个红包哇 !!感激不尽  

打开支付宝首页搜索“530724503” 立即领红包

 先上SpringContainer.start()的代码

e24d1672ea1fcfaf8391fa556ff967f38f347fc7

发现原来就是Spring容器的加载,前面就是读取配置文件,然后进行监听器添加,注册ShutdownHook,注意在new 容器的时候传refresh是false,所以容器没有在new的时候立马刷新,和之前版本有所区别。

容器创建好后调用context.refresh()中进行初始化操作

在Spring的refresh操作中,针对dubbo来说我着重关注的是下面几个方法


prepareBeanFactory(beanFactory);

创建bean工厂加载配置文件中的对象到容器中


registerListeners();

注册监听器,包括在SpringContainer.start()中添加的监听器和BeanDefinitionMap中实现ApplicationListener的监听器到defaultRetriever中


getApplicationEventMulticaster().addApplicationListener(listener);

getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);

以上方法将监听器放入defaultRetriever中


finishBeanFactoryInitialization(beanFactory);

初始化BeanDefinitionMap中不延迟的对象

注意:在初始化ServiceBean的实例对象时,因为ServiceBean实现了InitializingBean,所以会调用afterPropertiesSet() 方法,如果ServiceBean不是延迟的,则在afterPropertiesSet()中执行export();在线程池中进行出口登记


finishRefresh();

完成初始化操作

在该方法中会调用

publishEvent(new ContextRefreshedEvent(this));推送事件

从而会触发DubboApplicationListener和ServiceBean的onAppliactionEvent

ServiceBean.onApplicationEvent内有exprot()方法,从而将service的出口做了登记


如果这边文章帮助到你了,帮忙支付宝领个红包哇 !!感激不尽  

打开支付宝首页搜索“530724503” 立即领红包


详细流程见下面的流程图

e62c85f9b293a88fed7c634547ed369e352b28f1




相关文章
|
1月前
|
XML 缓存 Java
Spring源码之 Bean 的循环依赖
循环依赖是 Spring 中经典问题之一,那么到底什么是循环依赖?简单说就是对象之间相互引用, 如下图所示: 代码层面上很好理解,在 bean 创建过程中 class A 和 class B 又经历了怎样的过程呢? 可以看出形成了一个闭环,如果想解决这个问题,那么在属性填充时要保证不二次创建 A对象 的步骤,也就是必须保证从容器中能够直接获取到 B。 一、复现循环依赖问题 Spring 中默认允许循环依赖的存在,但在 Spring Boot 2.6.x 版本开始默认禁用了循环依赖 1. 基于xml复现循环依赖 定义实体 Bean java复制代码public class A {
|
1月前
|
XML 前端开发 Java
深入了解Spring MVC工作流程
深入了解Spring MVC工作流程
|
1月前
|
Java 测试技术 数据库连接
【Spring源码解读!底层原理高级进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨
【Spring源码解读!底层原理高级进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨
|
6天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
1月前
|
Java Spring
使用spring实现邮件的发送(含测试,源码,注释)
使用spring实现邮件的发送(含测试,源码,注释)
7 0
|
1月前
|
JSON Java 数据库连接
【spring(五)】SpringMvc总结 SSM整合流程
【spring(五)】SpringMvc总结 SSM整合流程
|
1月前
|
Java 容器 Spring
【spring(一)】核心容器总结
【spring(一)】核心容器总结
|
1月前
|
Java 开发者 容器
【Java】深入了解Spring容器的两个关键组件
【Java】深入了解Spring容器的两个关键组件
10 0
|
1月前
|
XML Java 数据格式
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (下)
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界
|
1月前
|
XML Java 数据格式
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (上)
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (上)