Articles

Introdução ao Google Guice for DI

Olá,

hoje, vou falar sobre como começar com o Google Guice for dependency injection em Java. Em primeiro lugar, vou introduzir alguns conceitos sobre o framework, então vamos escrever uma simples aplicação para exemplificar.

injeção de Dependência

como falamos sobre este post, injeção de dependência (DI) é uma técnica de fornecer dependências para os clientes, em vez de ter este último explicitamente obtê-los. DI é basicamente uma maneira de alcançar um objetivo mais geral chamado princípio de inversão de dependência (DIP), que afirma:

em vez de depender de implementações, prefere depender de abstrações.

Quando a aplicação de DI, nós precisamos de uma maneira de injetar (de arame, bind) as dependências para os clientes que estão a pedir-los, poderíamos fazê-lo manualmente, ao instanciar a classe do cliente ou podemos confiar em um framework para automatizar estas tarefas e também adicionar algumas funcionalidades interessantes, como a gestão do ciclo de vida.

em relação a Java, há uma variedade de frameworks com possíveis prós e contras, por exemplo, Solda, mola, Guice, etc.

neste post, nós estaremos usando Guice e em um post futuro, eu pretendo falar sobre a primavera, provavelmente no contexto de projetar APIs RESTful com inicialização de primavera e descanso de Primavera.

Google Guice

Google Guice é um framework para automatizar a injeção de dependência, fornecendo um recipiente para onde podemos mapear abstrações e implementações. Após o mapeamento, as dependências serão automaticamente injetadas nos clientes quando solicitado.

O mapeamento em Guice é alcançado pela implementação da com.o.injectar.Módulo que é normalmente feito herdando da classe base abstrata com.o.injectar.AbstractModule.

depois disso, precisamos anular o método de configuração e confiar em uma API fluente chamando bind e para métodos para definir o mapeamento entre a abstração (parâmetro de bind) e implementação (parâmetro de to).

então, podemos injetar as dependências anotando suas dependências com com.o.injectar.Injectar.finalmente, precisamos de obter uma com.o.injectar.Injector do nosso módulo previamente definido, por isso agora somos capazes de recuperar o cliente com o método getInstance e as suas dependências serão automaticamente injectadas.

exemplo

este exemplo consiste de uma parte de um sistema Java que envia informações de log sobre sua operação. Para simplificar a inclusão do Guice em nosso projeto, vamos usar o Maven como ferramenta de construção.

no pom.xml, adicione o seguinte artefacto para o Guice na versão 4. 0 na secção de dependências:

<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></versão>
</dependência>

Vamos criar a interface LogSender para representar o comportamento: “envia o log para algumas médio”:

Este serviço vai ser utilizado pelo Trocador de classe que tem uma referência para LogSender e a injeção vai ser feito pelo seu construtor anotado com @Injetar:

A implementação StdoutLogSender irá enviar o log para o fluxo de saída padrão, neste caso o console:

Agora, precisamos dizer Guice como mapa LogSender para StdoutLogSender, e fazemos isso pela LoggingModule classe:

Finalmente, a classe principal do Aplicativo, nós podemos criar um Injector e passar a nossa LoggingModule para seu construtor. Então, somos capazes de obter uma instância do Trocador de que terá a sua dependência em LogSender vinculado:

Conclusão

neste artigo, discutimos as noções básicas a respeito de como começar a usar o Google Guice para automação de injeção de dependência de tarefas na aplicação Java. Nós escrevemos uma aplicação simples para exemplificar como definir o mapeamento entre abstrações e implementações e como injetá-las em nossos clientes.

espero que com esta visão geral básica de Guice possa continuar os seus estudos sobre a injecção de dependência e como desenvolver código com um nível mais baixo de acoplamento e um elevado nível de coesão.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *