Google AutoService

1. Introduksjon

I denne raske opplæringen vil vi kort forklare Googles AutoService.

Dette er et merkeprosessorbibliotek som hjelper oss med å generere konfigurasjonsfiler for Java Service Provider Interface (SPI).

2. Java SPI

Enkelt sagt kan vi utnytte Java SPI til å utvikle utvidbare applikasjoner, siden det gir raske, sikre og dynamiske tilpasninger.

Java SPI bruker konfigurasjonsfiler for å finne og laste konkrete implementeringer av gitte tjenesteleverandørgrensesnitt. Å tilpasse et program på farten er en av hovedfunksjonene.

På den andre siden, det er lett å feilkonfigurere og også litt forvirrende for oss å legge til eller redigere konfigurasjonsfilene. Dette trinnet er også lett å glemme.

Dessuten er det alltid en risiko for skrivefeil som vi kanskje ikke legger merke til, siden konfigurasjonsfilene ikke blir vurdert av kompilatoren.

3. Google AutoService

Google AutoService er et åpen kildekode-generator, utviklet under Google Auto-prosjektet. Det er også to andre verktøy i tillegg til AutoService: AutoValue og AutoFactory.

Hensikten med dette biblioteket er å spare krefter og tid og på samme tid for å forhindre feilkonfigurasjon.

3.1. Maven Setup

La oss først legge til den automatiske tjenesteavhengigheten i applikasjonen vår. Vi kan sette avhengigheten som valgfri fordi vi bare trenger det på kompileringstid:

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

3.2. @AutoService Eksempel

For det andre oppretter vi et tjenesteleverandørgrensesnitt.

La oss anta at applikasjonen vår har en oversettelsesfunksjon. Vi tar sikte på å gjøre denne funksjonen utvidbar. Så vi kan enkelt koble til en hvilken som helst komponent av oversetterstjeneste leverandører:

offentlig grensesnitt TranslationService {String translate (String message, Locale from, Locale to); }

Applikasjonen vår vil bruke dette grensesnittet som et utvidelsespunkt. En implementering på klassestien vil bli injisert som en komponent.

Deretter implementerer vi denne tjenesten med to forskjellige oversettelsesleverandører som bruker @AutoService kommentar:

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

På tidspunktet for utarbeidelsen vil AutoService se etter merknaden og generere en konfigurasjonsfil for hvert av de tilsvarende grensesnittene og implementeringene.

Som et resultat får vi nå en konfigurasjonsfil som heter com.baeldung.autoservice.TranslationService. Denne filen inneholder fullt kvalifiserte navn på de to leverandørene:

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

3.3. @AutoService i aksjon

Nå er alt klart. La oss laste leverandørene igjennom ServiceLoader:

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

De ServiceLoader vil laste inn alle leverandører som er definert i konfigurasjonsfilen.

La oss sjekke antallet lastede leverandører:

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

Med andre ord, ServiceLoader har lastet inn alle leverandørforekomster. Derfor er det vår jobb å velge en av dem.

Så nå, la oss velge en av leverandørene og deretter ringe servicemetoden for å se om lasteren fungerer som forventet:

TranslationService googleService = StreamSupport.stream (loader.spliterator (), false) .filter (p -> p.getClass (). GetSimpleName (). Tilsvarer ("GoogleTranslationServiceProvider")) .findFirst () .get (); Strengmelding = "melding"; assertEquals (melding + "(oversatt av Google)", googleService.translate (melding, null, null));

4. Konklusjon

I denne artikkelen forklarte vi Google AutoService-biblioteket og øvde oss med et enkelt eksempel.

Google AutoService er et nyttig, men greit kildekodegeneratorbibliotek. Den sparer oss for å opprette og redigere tjenesteleverandørens konfigurasjonsfiler. Det garanterer også at det ikke vil være feilskrivede eller feilinformerte filer.

Kildekoden til denne veiledningen er som vanlig tilgjengelig på GitHub-prosjektet.


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