Google AutoService

1. Introduktion

I denne hurtige vejledning forklarer vi kort Googles AutoService.

Dette er et annoteringsprocessorbibliotek, der hjælper os med at generere Java Service Provider Interface (SPI) konfigurationsfiler.

2. Java SPI

Kort sagt kan vi udnytte Java SPI til at udvikle udvidelige applikationer, da det giver hurtige, sikre og også dynamiske tilpasninger.

Java SPI bruger konfigurationsfiler til at finde og indlæse konkrete implementeringer af givne tjenesteudbydergrænseflader. At tilpasse en applikation i farten er en af ​​dens vigtigste muligheder.

På den anden side, det er let at miskonfigurere og også lidt forvirrende for os at tilføje eller redigere konfigurationsfilerne. Dette trin er også let at glemme.

Derudover er der altid en risiko for skrivefejl, som vi muligvis ikke bemærker, da konfigurationsfilerne ikke betragtes af compileren.

3. Google AutoService

Google AutoService er et open source-kodegeneratorværktøj, der er udviklet under Google Auto-projektet. Der er også to andre værktøjer udover AutoService: AutoValue og AutoFactory.

Formålet med dette bibliotek er at spare kræfter og tid og på samme tid, for at forhindre miskonfiguration.

3.1. Maven opsætning

Lad os først tilføje den automatiske serviceafhængighed i vores applikation. Vi kan indstille afhængigheden som valgfri fordi vi kun har brug for det på kompileringstidspunktet:

 com.google.auto.service auto-service 1.0-rc5 sand 

3.2. @AutoService Eksempel

For det andet opretter vi en tjenesteudbydergrænseflade.

Lad os antage, at vores applikation har en oversættelsesfunktion. Vi tilstræber at gøre denne funktion udvidelig. Så vi kan nemt tilslutte enhver komponent til oversættelsestjenesteudbydere:

offentlig grænseflade TranslationService {String translate (String message, Locale from, Locale to); }

Vores applikation bruger denne grænseflade som et udvidelsespunkt. En implementering på klassestien injiceres som en komponent.

Dernæst implementerer vi denne service med to forskellige oversættelsesudbydere ved hjælp af @AutoService kommentar:

@AutoService (TranslationService.class) offentlig klasse BingTranslationServiceProvider implementerer TranslationService {@Override public String translate (String message, Locale from, Locale to) {// implementeringsdetaljer returnerer besked + "(oversat af Bing)"; }}
@AutoService (TranslationService.class) offentlig klasse GoogleTranslationServiceProvider implementerer TranslationService {@Override public String translate (String message, Locale from, Locale to) {// implementeringsdetaljer returnerer besked + "(oversat af Google)"; }}

På tidspunktet for kompilering vil AutoService kigge efter kommentaren og generere en konfigurationsfil til hver af de tilsvarende grænseflader og implementeringer.

Som et resultat får vi nu en konfigurationsfil med navnet com.baeldung.autoservice.TranslationService. Denne fil indeholder fuldt kvalificerede navne på de to udbydere:

com.baeldung.autoservice.BingTranslationServiceProvider com.baeldung.autoservice.GoogleTranslationServiceProvider

3.3. @AutoService i aktion

Nu er alt klar. Lad os indlæse udbyderne igennem ServiceLoader:

ServiceLoader loader = ServiceLoader.load (TranslationService.class);

Det ServiceLoader vil indlæse hver udbyder, der er defineret i konfigurationsfilen.

Lad os kontrollere antallet af indlæste udbydere:

lang optælling = StreamSupport.stream (loader.spliterator (), false) .count (); assertEquals (2, count);

Med andre ord, ServiceLoader har indlæst alle udbyderforekomster. Derfor er det vores job at vælge en af ​​dem.

Så nu, lad os vælge en af ​​udbyderne og derefter ringe til servicemetoden for at se, om læsseren fungerer som forventet:

TranslationService googleService = StreamSupport.stream (loader.spliterator (), false) .filter (p -> p.getClass (). GetSimpleName (). Er lig med ("GoogleTranslationServiceProvider")) .findFirst () .get (); Strengmeddelelse = "besked"; assertEquals (besked + "(oversat af Google)", googleService.translate (besked, null, null));

4. Konklusion

I denne artikel forklarede vi Google AutoService-biblioteket og øvede os også med et simpelt eksempel.

Google AutoService er et nyttigt, men ligetil kildekodegeneratorbibliotek. Det sparer os fra at oprette og redigere tjenesteudbyderens konfigurationsfiler. Det garanterer også, at der ikke er nogen fejlagtige eller fejlagtige filer.

Kildekoden til denne vejledning er tilgængelig som normalt på GitHub-projektet.