dremio ioc 机制简单说明
dremio 对于服务的依赖管理以及处理没有直接使用google guice,而是dremio 自己包装了一个类似guice的ioc 能力
提供的能力说明
因为对于ioc 来说需要包含不同的几种服务注入模式(属性注入,构造函数注入),服务也会包含不同的scope (单例,实例,provider模式)
同时为了处理不同注入注解的处理,dremio 也包装了自己的处理,相比直接使用guice dremio 也包装了不少其他的能力(remove,replace )
SingletonRegistry参考类图
SingletonRegistry 是对于服务的直接使用(ioc 以及对于ioc 的扩展能力),下图是提供的能力以及继承关系
说明
dremio 对于ioc 的处理核心是为了服务dremio 自己的service 机制,相对传统的ioc 机制扩展了不少,简单了解dremio 的ioc 机制有助于更好的学习dremio 源码
当然dremio 也是可以支持将guice 的ioc 能力集成到系统中的,主要是Binder 中的,接口定义如下,目前官方代码中并没有直接传递Injector的,主要是在测试代码
中使用到了,所以dremio 部分源码我们看起来比较杂乱,不像trino 代码很清晰(遵循了guice 的实践玩法)
public interface Binder extends BindingCreator, BindingProvider {
/**
* Temporary way to register a Guice Injector with Binder as a fallback mechanism
*
* @param injector the Guice instance to use as an fallback
*/
void registerGuiceInjector(Injector injector);
}
参考资料
common/src/main/java/com/dremio/service/BinderImpl.java
common/src/main/java/com/dremio/service/Binder.java
common/src/main/java/com/dremio/service/SingletonRegistry.java
sabot/kernel/src/test/java/com/dremio/exec/server/SabotNode.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-01-29 几种前后端分离开发部署模式说明
2022-01-29 objection.js 基于knex 构建的sql 友好的ORM 框架
2022-01-29 frontend-maven-plugin 插件学习
2021-01-29 cube.js dimensions 的一些说明
2021-01-29 cube.js measures 的一些说明
2020-01-29 hasura graphql-engine v1.0 发布了
2019-01-29 使用kube_ping进行Keycloak群集设置 - DZone Cloud