Introduktion til Google Guice for DI
Hej,
I Dag skal jeg tale om, hvordan man kommer i gang med Google Guice til afhængighedsinjektion i Java. For det første vil jeg introducere nogle begreber om rammen, så skriver vi et simpelt program til at eksemplificere.
Afhængighedsinjektion
som vi har talt om dette indlæg, er afhængighedsinjektion (DI) en teknik til at give afhængigheder til klienter i stedet for at have sidstnævnte eksplicit at få dem. DI er dybest set en måde at opnå et mere generelt mål ved navn dependency inversion principle (DIP), som siger:
i stedet for afhængigt af implementeringer foretrækker du at afhænge af abstraktioner.
Når vi anvender DI, har vi brug for en måde at injicere (tråd, binde) afhængighederne for de klienter, der anmoder om dem, vi kunne gøre det manuelt, når vi instantierer klientklassen, eller vi kunne stole på en ramme til at automatisere disse opgaver og også tilføje nogle interessante funktionaliteter, som livscyklusstyring.
Med hensyn til Java er der en række rammer med muligvis fordele og ulemper, for eksempel svejsning, fjeder, Guice osv.
i dette indlæg bruger vi Guice og i et fremtidigt indlæg har jeg til hensigt at tale om foråret, sandsynligvis i forbindelse med at designe afslappende API ‘ er med Spring Boot og Spring REST.
Google Guice
Google Guice er en ramme til at automatisere afhængighedsinjektion ved at levere en container, hvor vi kan kortlægge abstraktioner og implementeringer. Efter kortlægningen injiceres afhængighederne automatisk i klienter, når de anmodes om det.
kortlægningen i Guice opnås ved implementering af com.Googles.indsprøjte.Modul, som normalt gøres ved at arve fra den abstrakte base klasse com.Googles.indsprøjte.AbstractModule.
efter skal vi tilsidesætte konfigurationsmetoden og stole på en flydende API ved at kalde bind og til metoder til at definere kortlægningen mellem abstraktionen (parameter for bind) og implementering (parameter for til).
derefter kan vi injicere afhængighederne ved at kommentere dine afhængigheder med com.Googles.indsprøjte.Indsprøjte.
endelig skal vi få ET com.Googles.indsprøjte.Injektor fra vores tidligere definerede modul, så vi er nu i stand til at hente klienten med getInstance-metoden, og dens afhængigheder injiceres automatisk.
eksempel
dette eksempel består af en del af et Java-system, der sender logoplysninger om dets drift. For at forenkle inkluderingen af Guice i vores projekt skal vi bruge Maven som et byggeværktøj.
i pom.følgende artefakt til Guice i version 4.0 i afsnittet afhængigheder:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></version>
</afhængighed>
lad os oprette interface logsender for at repræsentere adfærden: “sender loggen til noget medium”:
denne service vil blive brugt af vekslerklasse, der har en henvisning til logsender, og injektionen vil blive udført af dens konstruktør kommenteret med @inject:
implementeringen StdoutLogSender sender loggen til standardudgangsstrømmen, i dette tilfælde konsollen:
nu skal vi fortælle Guice, hvordan man kortlægger logsender til stdoutlogsender, og vi gør det ved loggingmodule-klassen:
endelig kan vi i hovedklasseapplikationen oprette en injektor og videregive vores loggingmodule til dens konstruktør. Derefter er vi i stand til at få en forekomst af veksler, som vil have sin afhængighed af LogSender bundet:
konklusion
i denne artikel har vi diskuteret det grundlæggende om, hvordan man kommer i gang med Google Guice til automatisering af afhængighedsinjektionsopgaver i Java-applikation. Vi skrev en simpel applikation for at eksemplificere, hvordan man definerer kortlægningen mellem abstraktioner og implementeringer, og hvordan man injicerer dem i vores kunder.
Jeg håber, at du med denne grundlæggende oversigt over Guice kan fortsætte dine studier om afhængighedsinjektion og hvordan man udvikler kode med et lavere koblingsniveau og højt samhørighedsniveau.