核心 starter
soul-spring-boot-starter-gateway
依赖 soul-web ,该module中springboot 会自动配置
SoulConfiguration
ErrorHandlerConfiguration
SoulExtConfiguration
SpringExtConfiguration
SoulConfiguration
是soul的核心配置类,会创建如下几个bean
SoulWebHandler
该类中会包含soul所有的插件。
@Bean("webHandler")
public SoulWebHandler soulWebHandler(final ObjectProvider<List<SoulPlugin>> plugins) {
List<SoulPlugin> pluginList = plugins.getIfAvailable(Collections::emptyList);
final List<SoulPlugin> soulPlugins = pluginList.stream()
.sorted(Comparator.comparingInt(SoulPlugin::getOrder)).collect(Collectors.toList());
soulPlugins.forEach(soulPlugin -> log.info("load plugin:[{}] [{}]", soulPlugin.named(), soulPlugin.getClass().getName()));
return new SoulWebHandler(soulPlugins);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8U25DaP-1610904128760)(C:\Users\root\AppData\Roaming\Typora\typora-user-images\image-20210118001056319.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQB5NxP4-1610904194797)(C:\Users\root\AppData\Roaming\Typora\typora-user-images\image-20210118001056319.png)]
DispatcherHandler
spring 的控制处理器
CommonPluginDataSubscriber
内部包含 pluginDataHandlerList ,用来广播更新插件,选择器,配置规则
DubboMultiParameterResolveServiceImpl
dubbo 多参数处理类 可以自定义进行扩展
RemoteAddressResolver
目前未知用途
WebFilter
注册 CrossFilter,跨域过滤器,默认允许跨域。
注册 FileSizeFilter 文件大小过滤器
SoulConfig
soul 一些配置
TimeWebFilter
此过滤器 已经 deprecated 没有使用
webSocketWebFilter
WebSocket 请求过滤器
ErrorHandlerConfiguration
注册了一些错误异常处理类
SoulExtConfiguration
DefaultSoulResult soul返回结果类
SpringExtConfiguration
注册 SoulApplicationContextAware 将 spring上下文注册到 SoulApplicationContextAware 内,同时初始化一个 SpringBeanUtils
/**
* Application context aware application context aware.
* @return the application context aware
*/
@Bean
public ApplicationContextAware applicationContextAware() {
return new SoulApplicationContextAware();
}
/**
* The type Soul application context aware.
*/
public static class SoulApplicationContextAware implements ApplicationContextAware {
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
SpringBeanUtils.getInstance().setCfgContext((ConfigurableApplicationContext) applicationContext);
}
}
ion {
SpringBeanUtils.getInstance().setCfgContext((ConfigurableApplicationContext) applicationContext);
}
}