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

posted on   荣锋亮  阅读(29)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示