Registro

Começando com o básico, aqui está uma definição informal de Registro:

Mas:

Dito isso, pode ser útil entender essa classe para trabalhar com o Tink de forma eficiente por enquanto.

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

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

Esse é exatamente o problema. E um dos motivos da remoção do Registry. Porque, nesse caso, o código funciona somente até que os autores da biblioteca decidam não registrar mais esse primitivo. Nesse ponto, o código falha e o motivo é confuso e não óbvio. Portanto, sempre registre o que você usa. Por exemplo, se você pretende usar o MAC no seu código Java, faça o seguinte na fase de configuração:

MacConfig.register()

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

Há mais um lado para esse problema. Algumas das suas dependências podem registrar coisas que você realmente não precisa e do que prefere não depender. Esse é outro motivo para remover o registro global.


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