Java 基础设施 · Egothor
conflux
一个刻意保持小型的 Java 库,解决独立组件需要共享少量类型化状态并在其变化时作出反应的问题——但不会把这种协调需求演变成依赖注入框架或应用架构。
Typed共享键一个上下文键名与一致的 Java 类型关联
Thread-safe协调上下文存储和监听器结构面向并发使用设计
Weak监听器弱引用可避免订阅关系意外延长对象生命周期
SmallAPI 表面它是协调原语,而不是替代应用框架
一个小问题,往往会长成庞大的依赖图
某个组件计算出一个值。几个互不相关的组件需要最新值,其中一些还需要在值变化时立即响应。朴素做法是到处传递直接引用;“企业级”做法则可能引入整个框架。conflux 刻意位于这两者之间。
生产者写入类型化值→
共享上下文保存当前状态→
变更事件通知订阅者→
消费者独立响应
当你需要协调,而不是框架
- 类型安全键减少意外的集成类型不一致。
- 当前值 + 事件覆盖许多 UI 与基础设施场景。
- 弱监听器有助于避免意外对象保留。
- 小范围让库更容易嵌入较大的系统。
类型安全上下文,而不是“字符串驱动”的 Map
上下文使用类型化键,因此契约同时包含名称和预期 Java 类型。同一个键名不能在一个组件中悄悄代表 Integer,在另一个组件中又代表 String。这样更容易推理共享状态,并把常见的集成错误提前到键声明的位置。
概念 API类型安全共享状态
Key<Integer> COUNT = Key.of("count", Integer.class);
Ctx.INSTANCE.put(COUNT, 42);
int current = Ctx.INSTANCE.get(COUNT);
Ctx.INSTANCE.addListener(COUNT, value -> refreshView(value));
共享当前状态
组件可以获取当前值,而不必知道哪个生产者创建了它,也不需要在整个应用中携带生产者的直接引用。
变更通知
监听器可以对更新作出响应,需要事件驱动行为的消费者无需持续轮询上下文。
弱监听器引用
订阅设计避免因为忘记显式取消订阅,就让事件总线自动成为每个监听器的生命周期所有者。
并发使用
实现使用并发集合和 copy-on-write 监听器处理,使协调原语可以在多个应用线程间使用。
有意不成为应用框架
conflux 不试图控制对象创建、配置、调度或业务逻辑。它的价值恰恰相反:当少数独立开发的模块需要一个公共会合点时,可以加入一个很窄的契约。
适合用于少量共享状态 · 组件通知 · 跨模块协调
不要把它变成所有依赖的服务定位器 · 持久化层 · 分布式消息代理
这种狭窄范围也使该库适合作为更大系统中的基础设施:它只负责一个协调问题,把架构决策留给应用本身。