Class ConfigRegistry

java.lang.Object
io.github.theword.queqiao.core.config.schema.ConfigRegistry

public final class ConfigRegistry extends Object
配置注册中心(Schema)

职责:注册配置项与区块、按路径查找、遍历整棵树、检测重复与父子冲突。

区块由配置项的路径自动派生:注册 websocket_server.enable 会自动建立 websocket_server 区块;注册 addons.llm.model 会自动建立 addons 与 addons.llm。因此显式注册区块只用于补充注释与空行排版。

并发:读用读锁、注册用写锁;写盘等长操作应先取 snapshot(), 再基于快照工作,不必长时间持锁。

Since:
0.6.12
  • Field Details

  • Constructor Details

    • ConfigRegistry

      public ConfigRegistry()
  • Method Details

    • register

      public void register(ConfigKey<?> key)
      注册一个配置项
      Parameters:
      key - 配置项定义
      Throws:
      ConfigValidationException - 路径重复,或与已有配置项构成父子冲突
    • register

      public void register(ConfigSectionNode section)
      注册(或更新)一个区块的排版元数据

      区块路径通常已由配置项自动派生;此处用于补充注释与前后空行。

      Parameters:
      section - 区块
      Throws:
      ConfigValidationException - 该路径已是配置项
    • findByPath

      public ConfigKey<?> findByPath(String path)
      按路径查找配置项
      Parameters:
      path - 点分路径
      Returns:
      配置项;未注册时返回 null
    • size

      public int size()
      Returns:
      已注册配置项数量
    • freeze

      public void freeze()
      冻结注册中心。运行时启动完成配置声明后调用;之后不得再注册配置项或区块。
    • isFrozen

      public boolean isFrozen()
      Returns:
      注册中心是否已冻结
    • snapshot

      public ConfigTree snapshot()
      生成不可变 Schema 快照

      子节点顺序 = 声明顺序:区块在"它的第一个配置项出现的位置"被挂到父区块上, 因此同一份 Schema 多次生成的 YAML 结构完全一致(方案 §32.2 要求 deterministic)。

      Returns:
      配置树快照