美文网首页
Dubbo的最新源码中ServiceBean并没有实现Appli

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

作者: 北星七斗 | 来源:发表于2020-04-23 10:26 被阅读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开始算是一种猜测,如果有证实的小伙伴希望可以一起交流下~

    相关文章

      网友评论

          本文标题:Dubbo的最新源码中ServiceBean并没有实现Appli

          本文链接:https://www.haomeiwen.com/subject/ktloihtx.html