Para registro e descoberta de qualquer tipo de interface ou classe, em qualquer módulo no sistema, a Plataforma NetBeans suporta duas soluções não adequadas de maneira uniforme:
Fatores que podem determinar qual abordagem usar:
Lookup está disponível em versões de JDKs mais antigos e, portanto, você pode usá-la no lugar de ServiceLoader ao ser executada em JDKs mais antigos que o 1.6.
Lookup está pronta para funcionar dentro do contêiner de tempo de execução do NetBeans. Ela tem como descobrir todos os módulos do sistema, como ler eficazmente seus serviços definidos, etc.
Lookup suporta ouvintes. O código do cliente pode anexar um ouvinte e observar as alterações no conteúdo da pesquisa.. Trata-se de uma melhoria necessária para a adaptação ao ambiente dinâmico criado pelo contêiner de tempo de execução do NetBeans, onde os módulos podem ser ativados ou desativados no tempo de execução, o que pode afetar o conjunto de provedores de serviços registrados.
Lookup é extensível e substituível. Enquanto a classe ServiceLoader no JDK 1.6 é uma classe final com comportamento de literal, a Lookup do NetBeans é uma classe extensível que permite várias implementações. Isso pode ser útil ao escrever testes de unidade. Ou pode escrever uma versão melhorada da pesquisa que não leia apenas META-INF/services mas, por exemplo, localize os provedores de serviços solicitados na Internet, etc.
Lookup é uma abstração de finalidade geral. Enquanto a classe ServiceLoader do JDK pode de fato ter apenas uma instância por carregador de classes, pode haver milhares de instâncias de Lookup independentes, cada uma representando um único lugar para consultar serviços e interfaces. De fato, esta é exatamente a maneira em que Lookup é usada no NetBeans — ela representa o contexto de cada diálogo, elemento de janela, nó em uma árvore, etc.
Para uma série de tutoriais de quatro partes que aborda a classe Lookup, consulte: