O Google Guice é um OpenSource framework que fornece Injeção de Dependência(DI), através de anotações. Há outros frameworks que fazem isso também, os mais conhecidos são PicoConteiner e o Spring. A principal diferença entre eles e o Google Guice é que o PicoConteiner faz a injeção de dependências programaticamente, o Spring atráves de XML e o Google Guice pode ser feito através de anotações. O Google Guice também influenciou bastante a JSR-330, se não me engano até o pessoal de lá participou do desenvolvimento da JSR, Google Guice já implementa essa JSR conforme no site deles – http://code.google.com/p/google-guice/wiki/JSR330.
O que é a Injeção de Dependência?
A injeção de dependência é um design pattern que visa desacoplar os componentes da aplicação. Os componentes são instanciados externamente à classe. Um gerenciador controla essas instâncias. Esse gerenciador, através de uma configuração, liga os componentes de forma a montar a aplicação, ou seja, utilizamos a Injeção de Dependência quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema.
Vejo também que a Injeção de Dependência facilita o desenvolvimento voltado a Interfaces, ou seja, podemos trocar a implementação sem nos preocupar com as classes que já utilizavam desta interface e com a injeção de dependência podemos trocar as implementações apenas em um único local e nosso aplicativo continuará funcionando.
Um caso de uso
Um caso de uso, por exemplo, onde Injeção de Dependência manteria um baixo acoplamento em nosso software é:
Você tem uma página na Web que envia SMS, esse envio é feito por uma outra empresa, e você chama os serviços SOAP desta empresa. Na hora de renovar o seu contrato com a empresa, ela aumentou o preço em 100%. Mas felizmente existem outras empresas que fazem o mesmo serviço, porém cada uma o fornece à sua maneira, e você fechou o contrato com uma que utiliza Rest Services. E sua página Web está com aquele código que chamava o SOAP, que está espalhado.
Se no desenvolvimento dessa página Web você tivesse utilizado a Injeção de Dependências, a troca da API de envio de SMS seria o mais simples e o menos intrusivo em seu código.
A solução com Injeção de Dependência (Google Guice)
Feitas as apresentações sobre o Google Guice e como ele será útil para nosso aplicativo, vamos ao que interessa.
Vamos partir do principio de que você já criou uma estrutura java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) →, agora precisamos adicionar as dependências do Google Guice, você pode fazer o download desses arquivos e adicionar os JARs em seu projeto. Se você utilizar o maven, precisará dessas dependências:
<dependency><br /> <groupId>com.google.code.guice</groupId><br /> <artifactId>guice</artifactId><br /> <version>2.0</version><br /></dependency><br /><br /><dependency><br /> <groupId>aopalliance</groupId><br /> <artifactId>aopalliance</artifactId><br /> <version>1.0</version><br /></dependency>Primeiro vamos criar nossa Interface SmsService, que é onde vamos fazer a injeção de dependência.
public interface SmsServices {<br /> String send();<br />}Agora vamos criar duas implementações, uma para a empresa ABC e outra para XPTO.
public class SmsServicesAbcImpl implements SmsServices {<br /> @Override<br /> public String send() {<br /> return "SMS enviado pela empresa ABC";<br /> }<br />}public class SmsServicesXPTOImpl implements SmsServices {<br /> @Override<br /> public String send() {<br /> return "SMS enviado pela empresa XPTO";<br /> }<br />}Agora vamos criar uma classe que extends a AbstractModule do Google Guice, nela iremos definir as implementações para que vão ser injetadas na interface.
public class GuiceModule extends AbstractModule {<br /> @Override<br /> protected void configure() {<br /> bind(SmsServices.class).to(SmsServicesAbcImpl.class);<br /> }<br />}O que fizemos foi declarar que na interface SmsServices sempre será injetado SmsServicesAbcImpl, agora vamos criar um programa main para testar.
public class MainProgram {<br /> public static void main(final String[] args) {<br /> Injector injector = Guice.createInjector(new GuiceModule());<br /> SmsServices services = injector.getInstance(SmsServices.class);<br /> System.out.println(services.send());<br /> }<br />}O que fizemos foi pegar uma instância do Injector passar a classe, onde estão configurados os binds entre interface e implementação. Então, através do injector.getInstance(SmsServices.class), o Google Guice irá devolver a instância que definimos no GuiceModule.
Se tudo deu certo, seu resultado no console será isto:
SMS enviado pela empresa ABC
Agora precisar trocar a implementação para a da empresa XPTO. Basta alterar o arquivo GuiceModule e adicionar a implementação de XPTO. E, pronto, nosso código ficou com o acoplamento bem mais baixo.
Concluímos que nosso código ficou bem mais limpo e de fácil manipulação. E se aparecerem mais e mais implementações, pode trocar facilmente sem afetar nosso código.





