Registro

Começando pelo básico, veja uma definição informal de Registry:

Mas:

Dito isso, pode ser útil entender essa aula para trabalhar com o Tink por enquanto.

O que acontece quando você chama getPrimitive() em um identificador de conjunto de chaves? Ele encaminha chamar o Registro1, que contém objetos com métodos concretos para criar chaves e primitivos, como um AesGcm ou uma instância ChunkedMac. A tarefa do Registro é encaminhar a chamada ao objeto correto. Isso só funciona se o objeto estiver registrado. Por isso, é importante sempre registrar os primitivos que você vai usar.

Mas e se eu usar uma biblioteca que já registrou os primitivos necessários?

Esse é o problema. E um dos motivos para a remoção do Registry. Porque nesse caso seu código só funciona até que os autores da biblioteca decidam não registrar mais esse primitivo. Nesse ponto, seu código será corrompido e a não óbvia e confusa. Portanto, sempre registre o que você usar. Por exemplo, se você pretende usar o MAC no seu código Java, faça os seguintes itens na fase de configuração:

MacConfig.register()

Esse código garante que todos os objetos necessários sejam registrados no locais necessários para usar o primitivo MAC.

Existe mais um lado nesse problema. Algumas dependências podem registrar coisas de que realmente não precisa e das quais prefere não depender. Isso é outro motivo para remover o registro global.


  1. para a instância global de singleton da classe Registry. Usamos o nome "Registry" para a classe e o singleton, de forma intercambiável.