Dubbo的最新源码中ServiceBean并没有实现Appli

2020-04-23  本文已影响0人  北星七斗

最近在准备面试,在Github上把Dubbo的master代码导下来,然后白嫖别人的写的服务暴露博客,顺着别人思路看下来,发现ServiceBean在最新的源码中并没有实现ApplicationListener这个接口

最新的ServiceBean:
最新源码的ServiceBean
非最新的ServiceBean:
非最新版本包的ServiceBean

经过对比发现最新的继承的是ApplicationEventPublisherAware接口,而旧版本的继承的是ApplicationListener<ContextRefreshedEvent>接口

大部分博客视频讲解服务暴露的export方法根源是ServiceConfigexport方法,ServiceBean继承了ServiceConfig,利用实现ApplicationListener<ContextRefreshedEvent>接口的onApplicationEvent方法最终调用ServiceConfig的export方法

旧版本的ServiceBean
然而最新版本实现的ApplicationEventPublisherAware并没有去调用ServiceConfig的export方法,只是ServiceBean在完成export的时候利用这个接口去发布一个exported的事件,也就是暴露后的事件,并不是暴露事件
新版本ServiceBean
所以新继承的ApplicationEventPublisherAware这个接口好像并没有直接对服务暴露过程有作用。那么ServiceConfig的export的方法到底再哪里才会进行调用呢?

追根溯源发现DubboBootstrapApplicationListener这个类,继承了ApplicationListenerApplicationContextAware,并最后调用到DubboBootStrap方法

image.png
发现它再start方法中有一行exportServices,顾名思义是导出服务或者暴露服务
image.png
这个exportServices会最中调用ServiceConfigBase的export方法
image.png
ServiceConfigBase是ServiceConfig的父类,另外有一处疑惑的是在exportServices中有个configManager,这个configManager中包含了了一个Services的集合,猜测是所有暴露服务的集合,具体在何时何处将这些服务添加进去的还不知道。
以上是最近看博客的一些疑惑,因为忙着面试,也没时间去debug了,所以自该文章DubboBootstrapApplicationListener开始算是一种猜测,如果有证实的小伙伴希望可以一起交流下~
上一篇 下一篇

猜你喜欢

热点阅读