从基础知识开始,以下是 Registry 的非正式定义:
但是:
话虽如此,但理解此类可能有助于您 Tink 的成功之道。
当您对密钥集句柄调用 getPrimitive()
时,会发生什么情况?它会将您的
对 Registry1 的调用,其中包含具有具体创建方法的对象
键和基元,例如
AesGcm 键或 ChunkedMac 实例。Registry 的任务是转发调用
正确的对象。这只有在对象注册的情况下才有效,这就是为什么
务必要始终注册要使用的基元
但是,如果我使用的库已经注册了我所需的基元,该怎么办?
这就是问题所在。这也是我们移除 Registry 的一个原因。 因为在这种情况下,您的代码只在库作者决定 不再注册该基元。此时,您的代码就会被破坏, 原因不明显且令人困惑。因此,请始终注册您 使用。例如,如果您打算在 Java 代码中使用 MAC,则应进行 在设置阶段进行以下设置:
MacConfig.register()
此代码可确保在 才能使用 MAC 基元。
此问题还有一个方面。您的部分依赖项可能会注册 您实际并不需要并且不想依赖的东西。这是 删除全局注册表的另一个原因。
-
传递到类 Registry 的全局单例实例。我们使用“注册表”这一名称类和单例,可互换。 ↩