Google AutoService

1. Uvod

U ovom brzom vodiču ukratko ćemo objasniti Googleovu uslugu automatskih usluga.

Ovo je knjižnica procesora napomena koja nam pomaže u generiranju konfiguracijskih datoteka sučelja Java Service Provider Interface (SPI).

2. Java SPI

Jednostavno rečeno, možemo iskoristiti Java SPI za razvoj proširivih aplikacija, jer pruža brze, sigurne i dinamičke prilagodbe.

Java SPI koristi konfiguracijske datoteke za pronalaženje i učitavanje konkretnih implementacija danih sučelja davatelja usluga. Prilagođavanje aplikacije u hodu jedna je od glavnih mogućnosti.

S druge strane, lako je pogrešno konfigurirati i pomalo zbunjujuće za nas dodavanje ili uređivanje konfiguracijskih datoteka. Ovaj je korak također lako zaboraviti.

Osim toga, uvijek postoji rizik od pogrešaka pri upisu koje možda nećemo primijetiti, jer prevodilac ne uzima u obzir konfiguracijske datoteke.

3. Google AutoService

Google AutoService alat je za generiranje otvorenog koda, razvijen u okviru projekta Google Auto. Uz AutoService postoje i dva druga alata: AutoValue i AutoFactory.

Svrha ove knjižnice je ušteda truda i vremena i, istodobno, kako bi se spriječila pogrešna konfiguracija.

3.1. Postavljanje Mavena

Prvo, dodajmo ovisnost o automatskim uslugama u našu aplikaciju. Ovisnost možemo postaviti kao neobavezna jer nam treba samo u vrijeme sastavljanja:

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

3.2. @AutoService Primjer

Drugo, stvorit ćemo sučelje davatelja usluga.

Pretpostavimo da naša aplikacija ima značajku prevođenja. Cilj nam je učiniti ovu značajku proširivom. Dakle, bilo koju komponentu davatelja usluga prevođenja možemo lako priključiti:

javno sučelje TranslationService {String translate (String message, Locale from, Locale to); }

Naša će aplikacija koristiti ovo sučelje kao produžnu točku. Implementacija na putu predavanja ubrizgat će se kao komponenta.

Zatim ćemo ovu uslugu implementirati s dva različita davatelja usluga prevođenja koji koriste @AutoService napomena:

@AutoService (TranslationService.class) javna klasa BingTranslationServiceProvider implementira TranslationService {@Override public String translate (String message, Locale from, Locale to) {// detalji implementacije return message + "(preveo Bing)"; }}
@AutoService (TranslationService.class) javna klasa GoogleTranslationServiceProvider implementira TranslationService {@Override public String translate (String message, Locale from, Locale to) {// detalji implementacije return message + "(preveo Google)"; }}

U vrijeme kompilacije, AutoService će potražiti napomenu i generirati konfiguracijsku datoteku za svako odgovarajuće sučelje i implementacije.

Kao rezultat, sada ćemo imati konfiguracijsku datoteku s imenom com.baeldung.autoservice.TranslationService. Ova datoteka sadrži potpuno kvalificirana imena dvaju davatelja usluga:

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

3.3. @AutoService na djelu

Sad je sve spremno. Učitajmo dobavljače ServiceLoader:

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

The ServiceLoader učitat će svakog davatelja usluga definiranog u konfiguracijskoj datoteci.

Provjerimo broj učitanih davatelja usluga:

dugo brojanje = StreamSupport.stream (loader.spliterator (), false) .count (); assertEquals (2, count);

Drugim riječima, ServiceLoader učitao je sve instance davatelja usluge. Stoga je naš posao odabrati jednog od njih.

Dakle, hajde da odaberemo jednog od davatelja usluga, a zatim nazovimo metodu usluge da vidimo radi li loader kako se očekuje:

TranslationService googleService = StreamSupport.stream (loader.spliterator (), false) .filter (p -> p.getClass (). GetSimpleName (). Jednako ("GoogleTranslationServiceProvider")) .findFirst () .get (); Niz poruke = "poruka"; assertEquals (poruka + "(preveo Google)", googleService.translate (poruka, null, null));

4. Zaključak

U ovom smo članku objasnili knjižnicu Google AutoService i vježbali na jednostavnom primjeru.

Google AutoService korisna je, ali jednostavna biblioteka generatora izvornog koda. To spašava nas od stvaranja i uređivanja konfiguracijskih datoteka davatelja usluga. Također jamči da neće biti pogrešno napisanih ili pogrešno lociranih datoteka.

Izvorni kod ovog vodiča dostupan je na projektu GitHub kao i obično.


$config[zx-auto] not found$config[zx-overlay] not found