前言
昨天结尾是插件链的开端,今天继续
插件链
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方法时才初始化插件链