Dubbo的最新源码中ServiceBean并没有实现ApplicationListener这个接口

最近在准备面试,在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开始算是一种猜测,如果有证实的小伙伴希望可以一起交流下~
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容