Google AutoService

1. Bemutatkozás

Ebben a gyors bemutatóban röviden elmagyarázzuk a Google automatikus szolgáltatását.

Ez egy annotációs processzor könyvtár, amely segít a Java Service Provider Interface (SPI) konfigurációs fájlok létrehozásában.

2. Java SPI

Egyszerűen fogalmazva, a Java SPI-t felhasználhatjuk kibővíthető alkalmazások fejlesztésére, mivel gyors, biztonságos és dinamikus testreszabást biztosít.

A Java SPI konfigurációs fájlokat használ a konkrét megvalósítások megkeresésére és betöltésére adott szolgáltatói interfészek. Az alkalmazás menet közbeni testreszabása az egyik fő képessége.

Másrészről, könnyű rosszul konfigurálni, és egyúttal kissé zavaró is a számunkra a konfigurációs fájlok hozzáadása vagy szerkesztése. Ezt a lépést is könnyű elfelejteni.

Ezenkívül mindig fennáll az elírási hibák kockázata, amelyeket nem veszünk észre, mivel a fordító nem veszi figyelembe a konfigurációs fájlokat.

3. Google AutoService

A Google AutoService egy nyílt forráskódú generáló eszköz, amelyet a Google Auto projekt keretében fejlesztettek ki. Az AutoService mellett két másik eszköz is létezik: AutoValue és AutoFactory.

A könyvtár célja az erőfeszítések és az idő megtakarítása és ugyanakkor a téves konfiguráció megelőzése érdekében.

3.1. Maven Setup

Először adjuk hozzá az alkalmazás automatikus függőségét. A függőséget úgy állíthatjuk be választható mert csak fordításkor van szükségünk rá:

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

3.2. @AutoService Példa

Másodszor létrehozunk egy szolgáltatói felületet.

Tegyük fel, hogy alkalmazásunk rendelkezik fordítási funkcióval. Célunk, hogy ezt a funkciót kibővítsük. Tehát bármilyen fordító szolgáltatói komponenst egyszerűen csatlakoztathatunk:

nyilvános felület TranslationService {Karakterlánc lefordítása (Stringüzenet, Locale from, Locale to); }

Alkalmazásunk ezt az interfészt kiterjesztési pontként fogja használni. Az osztálypálya megvalósítását komponensként injektálják.

Ezt követően ezt a szolgáltatást két különböző fordítószolgáltatóval valósítjuk meg a @AutoService kommentár:

@AutoService (TranslationService.class) nyilvános osztály BingTranslationServiceProvider megvalósítja a TranslationService {@Override public String translate (String message, Locale from, Locale to) {// implementáció részletei return message + "(Bing fordítása)"; }}
@AutoService (TranslationService.class) public class GoogleTranslationServiceProvider implementates TranslationService {@Override public String translate (String message, Locale from, Locale to) {// implementáció részletei return message + "(a Google fordítása)"; }}

A fordításkor az AutoService megkeresi a feliratozást, és konfigurációs fájlt generál a megfelelő interfészek és megvalósítások mindegyikéhez.

Ennek eredményeként most megkapunk egy konfigurációs fájlt com.baeldung.autoservice.TranslationService. Ez a fájl a két szolgáltató teljesen minősített nevét tartalmazza:

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

3.3. @AutoService akcióban

Most minden készen áll. Töltsük át a szolgáltatókat ServiceLoader:

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

A ServiceLoader a konfigurációs fájlban definiált összes szolgáltatót betölteni fogja.

Ellenőrizzük a betöltött szolgáltatók számát:

long count = StreamSupport.stream (loader.spliterator (), hamis) .szám (); assertEquals (2, számít);

Más szavakkal, a ServiceLoader betöltötte az összes szolgáltatói példányt. Ezért az a feladatunk, hogy kiválasszuk közülük az egyiket.

Tehát válasszuk ki az egyik szolgáltatót, majd hívjuk meg a szolgáltatási módszert, hogy lássuk, a betöltő a várt módon működik-e:

TranslationService googleService = StreamSupport.stream (loader.spliterator (), false) .filter (p -> p.getClass (). GetSimpleName (). Egyenlő ("GoogleTranslationServiceProvider")) .findFirst () .get (); Karakterlánc üzenet = "üzenet"; assertEquals (üzenet + "(a Google fordítása)", googleService.translate (üzenet, null, null));

4. Következtetés

Ebben a cikkben elmagyaráztuk a Google AutoService könyvtárat, és egy egyszerű példával is gyakoroltuk.

A Google AutoService egy hasznos, de egyszerű forráskód-generáló könyvtár. Azt megment minket a szolgáltató konfigurációs fájljainak létrehozásától és szerkesztésétől. Ez garantálja azt is, hogy nem lesznek rosszul írt vagy helytelen fájlok.

Az oktatóanyag forráskódja a szokásos módon elérhető a GitHub projekten.