Este artigo apresenta o framework open source de injeção de dependências do Google, chamado Guice. Durante o estudo, será construído um pequeno sistema baseado em JSF e nos padrões de projeto MVC, DAO e Service Facade, como forma de demonstrar a injeção de dependências ao leitor a partir do Guice.
Em que situação o tema é
útil
Este tema é útil para os
desenvolvedores Java que desejam adotar a injeção de dependências em suas
aplicações de forma simples e produtiva com o uso do framework Google Guice.
Este artigo serve como um material introdutório para este fim, abordando em seu
conteúdo os princípios de DI. Dentre as vantagens conquistadas ao adotar a
injeção de dependências, destaca-se, principalmente, a redução do grau de
acoplamento entre as classes, o que resulta de forma direta na facilidade de
tarefas como compreensão e manutenção do código.
O Guice (pronunciasse: juice) é um framework desenvolvido pelo Google para injeção de dependências que utiliza as mais modernas características do Java. A injeção de dependências (Dependency Injection – DI) é um conhecido padrão de projeto que possibilita um baixo nível de acoplamento entre os módulos de um sistema, tendo como finalidade injetar em cada componente suas dependências. Ao invés de você instanciar os objetos, eles são instanciados para você, sempre que isto for necessário dentro do ciclo de vida da sua aplicação. Em Java, o Spring talvez seja o framework de DI mais famoso na linguagem, e com o lançamento da plataforma Java EE 6, foi disponibilizado um recurso de DI chamado Contexts and Dependency Injection, mais conhecido como CDI.
Os desenvolvedores do Google idealizaram o Guice inicialmente para o projeto AdWords. Com o passar do tempo, o Guice foi inserido em diversos outros projetos do Google, como também disponibilizado tempos depois para uso pela comunidade sob a licença Apache 2.0 (veja mais informações na seção Links). Atualmente ele está na versão 3 e pode ser utilizado em sistemas que adotam a versão 5 do Java ou alguma posterior.
O principal objetivo do Guice é ser um framework leve e totalmente configurável a partir do próprio código Java, isto é, sem a necessidade de configurações por meio de arquivos XML. É possível utilizá-lo em projetos que adotem OSGI, Struts, Swing, JPA, Servlets e sistemas Android, com o uso do RoboGuice. Outro ponto importante é que a versão 3 é também baseada na JSR 330 (veja Links), especificação criada para padronizar os componentes de Injeção de Dependências entre os frameworks.
De acordo com informações disponíveis na documentação do Guice, ele visa tornar o desenvolvimento e depuração mais fáceis e rápidos. Por se tratar de um framework de injeção de dependências, algumas pessoas têm a tendência de compará-lo diretamente com o Spring, mas os próprios idealizadores do Guice dizem que não existe uma comparação direta e que ele nem foi construído para isso, já que nasceu de uma necessidade interna da empresa. Eles dizem também ter tirado muito proveito do que o Spring já oferecia para desenvolver a sua própria ferramenta de injeção de dependência, e até que os desenvolvedores do Spring tiveram acesso a todo o código fonte do Guice, mesmo antes de sua primeira versão ser lançada, possuindo acesso ao repositório dos fontes desde então.
Neste contexto, o artigo apresentará alguns conceitos e técnicas básicas de como fazer uso da injeção de dependências gerenciadas pelo Guice. Assim, será demonstrado, por meio de um pequeno projeto, como usar os recursos do Guice com Hibernate e JavaServer Faces 2.
Download e instalação
Na página oficial do Google Guice (veja a seção Links) é possível encontrar os arquivos necessários para download, sua documentação e também um bom material de apoio ao usuário que contém dicas e exemplos de como utilizar o framework. O download das bibliotecas necessárias para uso do Guice pode ser feito por meio desta página ou de um repositório Maven (ver seção Links), ferramenta de gerência de projetos que permite ao desenvolvedor adicionar, a partir de um arquivo XML, as bibliotecas externas do projeto, como também realizar a compilação e empacotamento do sistema.
No projeto que será apresentado como exemplo neste artigo, vamos fazer uso do Maven para gerenciar as bibliotecas externas. Observe na Listagem 1 o trecho do pom.xml que declara as dependências necessárias para trabalhar com o Guice.
Listagem 1. Dependências Maven do Google Guice.
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>3.0</version>
</dependency>
Na Listagem 1, a dependência <artifactId>guice</artifactId> é responsável por adicionar ao projeto o DI do Guice, e <artifactId>guice-servlet</artifactId> fornece as classes para integração do Guice com aplicações baseadas em servlets. Já na Listagem 2 temos as demais bibliotecas adicionadas ao projeto, como Hibernate, MySQL e as bibliotecas referentes ao JSF 2.
Listagem 2. Dependências Maven para o Hibernate e JSF 2.
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.1.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
...
Confira outros conteúdos:
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,00
Total: R$ 708,00
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 64,00 /mês
Total: R$ 768,00
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.