本章先简单写下dubbo在启动时是怎么同时整合spring容器的
首先dubbo的启动是在:org.apache.dubbo.container.Main#main
可以看到main方法中首先是肯定没有入参的,所以会去加载
public static final String CONTAINER_KEY = "dubbo.container";
这个key对应的配置,然后在dubbo的2.7.8版本中没有这个配置,所以他会使用LOADER.getDefaultExtensionName()
的默认值,那么LOADER
这个东西其实就是前面分析SPI的时候了解过的,其实是org.apache.dubbo.container.Container
的扩展类,那么LOADER.getDefaultExtensionName()
肯定就是Container
上面的注解@SPI("spring")
的默认值spring
了,这个不理解的可以去看看前面讲的dubbo的SPI
那么最终获取的config
值其实就是spring
,那么在下面LOADER.getExtension(args[i])
这个代码执行的结果肯定就是Container
接口的spring实现了,其实就是:
那么找到这个实现之后就很明显了,回到Main
方法里面,在后面很明显的调用了container.start()
,其实就是调用的org.apache.dubbo.container.spring.SpringContainer#start
,这里就是dubbo整合spring的开始,这里的其实就是spring容器启动的相关知识了,可以去看我以前的一篇spring容器启动的文章,实际就是spring容器的启动
本篇先写到这 其他的后面再补