Google AutoService

1. Úvod

V tomto rýchlom výučbe stručne vysvetlíme službu Google AutoService.

Toto je knižnica anotačného procesora, ktorá nám pomáha pri generovaní konfiguračných súborov rozhrania SPI (Java Service Provider Interface).

2. Java SPI

Zjednodušene povedané, môžeme Java SPI využiť na vývoj rozšíriteľných aplikácií, pretože poskytuje rýchle, bezpečné a tiež dynamické prispôsobenie.

Java SPI používa konfiguračné súbory na vyhľadanie a načítanie konkrétnych implementácií poskytovaných služieb. Prispôsobovanie aplikácie za behu je jednou z jej hlavných schopností.

Na druhej strane, je ľahké ho zle nakonfigurovať a je pre nás aj trochu mätúce pridávať alebo upravovať konfiguračné súbory. Na tento krok je tiež ľahké zabudnúť.

Okrem toho vždy existuje riziko preklepov, ktoré si nemusíme všimnúť, pretože konfiguračné súbory kompilátor nezohľadňuje.

3. Google AutoService

Google AutoService je nástroj na generovanie otvoreného zdrojového kódu, vyvinutý v rámci projektu Google Auto. Okrem služby AutoService existujú aj ďalšie dva nástroje: AutoValue a AutoFactory.

Účelom tejto knižnice je ušetriť úsilie a čas a zároveň zabrániť nesprávnej konfigurácii.

3.1. Nastavenie Maven

Najskôr do našej aplikácie pridáme závislosť automatických služieb. Závislosť môžeme nastaviť ako voliteľné pretože to potrebujeme iba v čase kompilácie:

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

3.2. @ AutoService Príklad

Po druhé, vytvoríme rozhranie poskytovateľa služieb.

Predpokladajme, že naša aplikácia má funkciu prekladu. Naším cieľom je, aby bola táto funkcia rozšíriteľná. Môžeme teda ľahko pripojiť akýkoľvek komponent poskytovateľa prekladateľských služieb:

verejné rozhranie TranslationService {String translate (String message, Locale from, Locale to); }

Naša aplikácia použije toto rozhranie ako bod rozšírenia. Implementácia do cesty triedy bude vložená ako komponent.

Ďalej implementujeme túto službu u dvoch rôznych poskytovateľov prekladov pomocou @ AutoService anotácia:

@AutoService (TranslationService.class) verejná trieda BingTranslationServiceProvider implementuje TranslationService {@Override public String translate (String message, Locale from, Locale to) {// podrobnosti implementácie návratová správa + "(preložil Bing)"; }}
@AutoService (TranslationService.class) verejná trieda GoogleTranslationServiceProvider implementuje TranslationService {@Override public String translate (String message, Locale from, Locale to) {// podrobnosti implementácie návratová správa + "(preložené Googlom)"; }}

V čase kompilácie služba AutoService vyhľadá anotáciu a vygeneruje konfiguračný súbor pre každé z príslušných rozhraní a implementácií.

Výsledkom bude, že teraz budeme mať konfiguračný súbor s názvom com.baeldung.autoservice.TranslationService. Tento súbor obsahuje úplné mená dvoch poskytovateľov:

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

3.3. @ AutoService v akcii

Teraz je všetko pripravené. Načítajme poskytovateľov ServiceLoader:

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

The ServiceLoader načíta všetkých poskytovateľov definovaných v konfiguračnom súbore.

Skontrolujte počet načítaných poskytovateľov:

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

Inými slovami, ServiceLoader načítal všetky inštancie poskytovateľa. Preto je našou úlohou vybrať jednu z nich.

Takže teraz si vyberieme jedného z poskytovateľov a potom zavoláme metódu služby, aby sme zistili, či načítač funguje podľa očakávaní:

TranslationService googleService = StreamSupport.stream (loader.spliterator (), false) .filter (p -> p.getClass (). GetSimpleName (). Equals ("GoogleTranslationServiceProvider")) .findFirst () .get (); String message = "správa"; assertEquals (message + "(preložené spoločnosťou Google)", googleService.translate (správa, null, null));

4. Záver

V tomto článku sme vysvetlili knižnicu Google AutoService a precvičili sme si aj jednoduchý príklad.

Google AutoService je užitočná, ale jednoduchá knižnica generátora zdrojového kódu. To šetrí nás pri vytváraní a upravovaní konfiguračných súborov poskytovateľa služieb. Zaručuje tiež, že nebudú existovať žiadne nesprávne napísané alebo nesprávne umiestnené súbory.

Zdrojový kód tohto tutoriálu je v projekte GitHub k dispozícii ako obvykle.


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