注册表

从基本信息开始,以下是 Registry 的非正式定义:

但是:

尽管如此,了解此类可能还是有助于当前高效地使用 Tink。

当您对密钥集句柄调用 getPrimitive() 时,会发生什么情况?它会将您的调用转发给 Registry1,其中包含使用具体方法创建键和基元(例如 AesGcm 键或 ChunkedMac 实例)的对象。Registry 的任务是将调用转发到正确的对象。这只有在对象已注册的情况下才有效,因此请务必始终注册要使用的基元

但是,如果我使用的库已经注册了所需的基元,该怎么办?

这正是问题所在。以及 Registry 被移除的原因之一。因为在这种情况下,您的代码可以仅在库作者决定不再注册该基元之前运行。此时,您的代码会中断,原因并不明显且令人困惑。因此,请务必注册您使用的内容。例如,如果您打算在 Java 代码中使用 MAC,则应在设置阶段执行以下操作:

MacConfig.register()

此代码可确保在必要的位置注册所有必要的对象,以便您使用 MAC 基元。

这个问题还有另外一面。您的某些依赖项可能会注册您实际上不需要且不希望依赖的内容。这是移除全局注册表的另一个原因。


  1. 确切地说,是 Registry 类的全局单例实例。对于类和单例,我们可互换使用“Registry”名称。