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

简介: 在前面的文章中,介绍了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




相关文章
|
3月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
3月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
502 2
|
6月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
202 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
5月前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
|
9月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
570 70
|
8月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
11月前
|
XML Java 数据格式
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
11月前
|
IDE Java 应用服务中间件
spring boot 启动流程
Spring Boot 启动流程简介: 在使用 Spring Boot 之前,启动 Java Web 应用需要配置 Web 容器(如 Tomcat),并将应用打包放入容器目录。而使用 Spring Boot,只需运行 main() 方法即可启动 Web 应用。Spring Boot 的核心启动方法是 SpringApplication.run(),它负责初始化和启动应用上下文。 主要步骤包括: 1. **应用启动计时**:使用 StopWatch 记录启动时间。 2. **打印 Banner**:显示 Spring Boot 的 LOGO。 3. **创建上下文实例**:通过反射创建
650 5