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

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值