初探Soul网关week03_07

142 阅读1分钟

前言

昨天结尾是插件链的开端,今天继续

插件链

1、DefaultSoulPluginChain:

图:DefaultSoulPluginChain 的继承关系 SoulPluginChain ,它其实是 SoulWebHandler 的内部类,猜测除了SoulWebHandler 之外不会有类使用,使用 option + F7 查看,果然只有在 SoulWebHandler 中使用

2、SoulWebHandler:

图:DefaultSoulPluginChain 其实是 SoulWebHandler 的内部类

SoulWebHandler 是处理web请求的入口和核心 SoulWebHandler 是 web 请求处理的起点,在此创建并开始插件链的处理。 同 DefaultSoulPluginChain一样,SoulWebHandler 也是持有通过构造方法传入的插件链

handle 方法负责插件链执行指标度量的采集,通过在 DefaultSoulPluginChain 执行时加订阅实现,DefaultSoulPluginChain 在此处完成初始化

3、SoulConfiguration:

全局查找 SoulWebHandler 构造方法可以定位到 SoulConfiguration 的 soulWebHandler 方法,看下 SoulConfiguration 的实现。

4、初始化 SoulWebHandler

soul-bootstrap启动的过程中,所有插件是怎么形成final ObjectProvider plugins,然后初始化SoulWebHandler的呢? SoulConfiguration 配置类通过配置 @ComponentScan("org.dromara.soul"),通知 spring 扫描所有引入的 org.dromara.soul 包。 同属 org.dromara.soul 包下所有插件的 starter项目中,在各自的spring.factories 文件里都指定了自动配置类,SoulPlugin类型的Bean都会被加到 ObjectProvider<List> 中

总结

  • 插件链是根据不同的配置(starter)生成的
  • SoulConfiguration 核心配置类会将 SoulWebHandler 装入IOC 容器
  • SoulWebHandler 持有插件的列表,但只有调用 handle方法时才初始化插件链