Soul网关源码探秘《七》 - 插件链初始化分析
soul-bootstrap 与插件链之间的关系
前文中我们发现soul-web
项目启动时,在初始化SoulWebHandler
的过程中会使用传入的参数plugins
来形成插件链。
那么问题来了,网关项目soul-bootstrap
启动的时候,又是怎么形成插件链的呢?
在初始化SoulWebHandler Bean
的位置打一个断点,然后重启网关项目soul-bootstrap
,验证是否会经过初始化SoulWebHandler Bean
的逻辑。结果果然不出所料。
在断点处,已经有15个插件加载了进来。接下来继续探索一下soul-bootstrap
和soul-web
之间的引用关系。
在项目内全局搜索soul-web
,可以发现在soul-spring-boot-starter-gateway
把它添加为了依赖。之后在 soul-bootstrap
的 pom 文件中去验证,果然它又把soul-spring-boot-starter-gateway
添加为了依赖。至此soul-bootstrap
与soul-web
之间的关系就明确了。
插件链如何初始化
soul-bootstrap
启动的过程中,所有插件又是怎么形成final ObjectProvider<List<SoulPlugin>> plugins
,然后初始化SoulWebHandler
的呢?
可以看到SoulWebHandler
所在的配置类通过配置了@ComponentScan("org.dromara.soul")
会去扫描org.dromara.soul
包。
同属org.dromara.soul
包下所有插件的 starter
项目中,在各自的spring.factories
文件里都指定了自动配置类。以DividePluginConfiguration
为例:
因此,List<SoulPlugin>
会去收集在soul-bootstrap
的 pom 文件里引入了相关依赖的插件,并以此形成插件链。