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




相关文章
|
2月前
|
Dubbo Java 应用服务中间件
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
44 0
|
3月前
|
Dubbo Java 应用服务中间件
Spring Boot Dubbo 构建分布式服务
Spring Boot Dubbo 构建分布式服务
47 0
|
20天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
42 0
|
1月前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
1月前
|
Dubbo Java 应用服务中间件
Spring Boot整合Dubbo+Zookeeper实现RPC调用
Spring Boot整合Dubbo+Zookeeper实现RPC调用 技术栈说明 Dubbo:Dubbo作为RPC框架,能在多个服务之间实现远程服务的调用。比如有两个独立的微服务A和B,A服务想要调用B服务时,因为两者不在同个内存空间中,不能直接调用,所以可以通过Dubbo实现这点。 功能和Spring Cloud的Feign相同,两者都是应用于微服务架构的远程调用框架 Zookeeper:作为注册中心去管理Dubbo服务,这点和Eureka、Nacos相同。 概述 通过一个示例说明Dubbo+Zookeeper在Spring Boot中的应用。 现有两个服务provider和con
114 4
|
1月前
|
负载均衡 Dubbo Java
Dubbo 挂载到 Spring Cloud 注册中心
【2月更文挑战第12天】Dubbo 挂载到 Spring Cloud 注册中心
26 7
|
2月前
|
监控 安全 Linux
|
2月前
|
Java 关系型数据库 MySQL
深入分析Spring事务和底层原理
深入分析Spring事务和底层原理
39 1
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo 第四节: Spring与Dubbo整合原理与源码分析
DubboConfigConfigurationRegistrar的主要作⽤就是对propties⽂件进⾏解析并根据不同的配置项项⽣成对应类型的Bean对象。
|
2月前
|
Java 持续交付 虚拟化
深入浅出:使用Docker容器化改善Java应用的开发与部署流程
在快速迭代与持续集成的软件开发周期中,确保应用在各种环境中一致运行是一个挑战。本文介绍了如何利用Docker容器技术,来容器化Java应用,以实现环境一致性、简化配置和加速部署过程。我们将从Docker的基础知识开始,探讨其与传统虚拟机的区别,进而深入到如何创建Dockerfile,构建镜像,以及运行和管理容器。此外,文章还将涵盖使用Docker Compose来管理多容器应用的策略,以及如何利用容器化改善CI/CD流程。通过本文,读者将获得关于如何高效地利用Docker改善Java应用开发与部署流程的实践指导。
159 1