introduktion till Google Guice för DI
Hej,
idag ska jag prata om hur man kommer igång med Google Guice för beroendeinjektion i Java. För det första presenterar jag några begrepp om ramverket, då skriver vi en enkel applikation för att exemplifiera.
Dependency Injection
som vi har pratat om det här inlägget är dependency injection (DI) en teknik för att tillhandahålla beroenden för kunder istället för att de senare uttryckligen får dem. DI är i grunden ett sätt att uppnå ett mer allmänt mål som heter dependency inversion principle (DIP), som säger:
istället för beroende på implementeringar föredrar du att bero på abstraktioner.
När vi tillämpar DI behöver vi ett sätt att injicera (tråd, binda) beroenden för de kunder som begär dem, vi kan göra det manuellt när vi instanserar klientklassen eller vi kan lita på ett ramverk för att automatisera dessa uppgifter och också lägga till några intressanta funktioner, som livscykelhantering.
När det gäller Java finns det en mängd olika ramar med eventuellt fördelar och nackdelar, till exempel Weld, Spring, Guice etc.
i det här inlägget använder vi Guice och i ett framtida inlägg tänker jag prata om våren, förmodligen i samband med att designa vilsamma API: er med Vårstart och VÅRSTÖD.
Google Guice
Google Guice är ett ramverk för att automatisera beroendeinjektion genom att tillhandahålla en behållare där vi kan kartlägga abstraktioner och implementeringar. Efter kartläggningen kommer beroenden automatiskt injiceras i klienter på begäran.
kartläggningen i Guice uppnås genom genomförandet av com.google.injicera.Modul som normalt görs genom att ärva från den abstrakta basklassen com.google.injicera.Abstractmodul.
Efter måste vi åsidosätta configure-metoden och förlita oss på ett flytande API genom att ringa bind och till metoder för att definiera kartläggningen mellan abstraktionen (bind-parametern) och implementeringen (parametern till).
sedan kan vi injicera beroenden genom att kommentera dina beroenden med com.google.injicera.Injicera.
Slutligen måste vi få en com.google.injicera.Injektor från vår tidigare definierade modul, så vi kan nu hämta klienten med getInstance-metoden och dess beroenden injiceras automatiskt.
exempel
detta exempel består av en del av ett Java-system som skickar logginformation om dess funktion. För att förenkla införandet av Guice i vårt projekt kommer vi att använda Maven som ett byggverktyg.
i pom.xml, Lägg till följande artefakt för Guice i version 4.0 i avsnittet beroenden:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></version>
</beroende>
låt oss skapa gränssnittet logsender för att representera beteendet: ”skickar loggen till något medium”:
denna tjänst kommer att användas av växlarklass som har en referens till logsender och injektionen kommer att göras av dess konstruktör kommenterad med @inject:
implementeringen StdoutLogSender skickar loggen till standardutmatningsströmmen, i detta fall konsolen:
nu måste vi berätta för Guice hur man mappar logsender till stdoutlogsender, och vi gör det med loggingmodule-klassen:
slutligen kan vi i huvudklassapplikationen skapa en injektor och skicka vår loggingmodule till dess konstruktör. Sedan kan vi få en instans av värmeväxlare som kommer att ha sitt beroende av LogSender bunden:
slutsats
i den här artikeln har vi diskuterat grunderna för hur du kommer igång med Google Guice för automatisering av beroendeinjektionsuppgifter i Java-applikationen. Vi skrev en enkel applikation för att exemplifiera hur man definierar kartläggningen mellan abstraktioner och implementeringar och hur man injicerar dem i våra kunder.
Jag hoppas att du med denna grundläggande översikt över Guice kan fortsätta dina studier om beroendeinjektion och hur man utvecklar kod med lägre koppling och hög sammanhållning.