Perkhidmatan Auto Google

1. Pengenalan

Dalam tutorial ringkas ini, kami akan menerangkan secara ringkas Perkhidmatan AutoService Google.

Ini adalah perpustakaan pemproses anotasi yang membantu kami menghasilkan fail konfigurasi Java Service Provider Interface (SPI).

2. SPI Java

Sederhananya, kita dapat memanfaatkan Java SPI untuk mengembangkan aplikasi yang dapat diperluas, karena menyediakan penyesuaian yang cepat, aman, dan juga dinamis.

Java SPI menggunakan fail konfigurasi untuk mencari dan memuat pelaksanaan konkrit antara muka penyedia perkhidmatan yang diberikan. Menyesuaikan aplikasi dengan cepat adalah salah satu keupayaan utamanya.

Sebaliknya, mudah untuk salah konfigurasi dan juga agak membingungkan bagi kita untuk menambah atau mengedit fail konfigurasi. Langkah ini juga mudah dilupakan.

Selain itu, selalu ada risiko kesalahan ketik yang mungkin tidak kita perhatikan, kerana fail konfigurasi tidak dipertimbangkan oleh penyusun.

3. Perkhidmatan Auto Google

Google AutoService adalah alat penjana kod sumber terbuka, yang dikembangkan di bawah projek Google Auto. Terdapat juga dua alat lain selain AutoService: AutoValue dan AutoFactory.

Tujuan perpustakaan ini adalah untuk menjimatkan usaha dan masa dan, pada masa yang sama, untuk mengelakkan salah konfigurasi .

3.1. Persediaan Maven

Pertama, mari tambah pergantungan perkhidmatan automatik dalam aplikasi kami. Kita boleh menetapkan kebergantungan sebagai pilihan kerana kita hanya memerlukannya pada waktu penyusunan:

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

3.2. Contoh @AutoService

Kedua, kami akan membuat antara muka penyedia perkhidmatan.

Mari kita anggap bahawa aplikasi kita mempunyai ciri terjemahan. Kami berhasrat menjadikan ciri ini dapat diperluas. Oleh itu, kita boleh memasukkan komponen penyedia perkhidmatan terjemahan dengan mudah:

public interface TranslationService { String translate(String message, Locale from, Locale to); }

Aplikasi kami akan menggunakan antara muka ini sebagai titik perpanjangan. Pelaksanaan pada classpath akan disuntik sebagai komponen.

Seterusnya, kami akan melaksanakan perkhidmatan ini dengan dua penyedia terjemahan yang berbeza menggunakan anotasi @AutoService :

@AutoService(TranslationService.class) public class BingTranslationServiceProvider implements TranslationService { @Override public String translate(String message, Locale from, Locale to) { // implementation details return message + " (translated by Bing)"; } }
@AutoService(TranslationService.class) public class GoogleTranslationServiceProvider implements TranslationService { @Override public String translate(String message, Locale from, Locale to) { // implementation details return message + " (translated by Google)"; } }

Pada masa penyusunan, AutoService akan mencari anotasi dan menghasilkan fail konfigurasi untuk setiap antara muka dan pelaksanaan yang sesuai.

Hasilnya, sekarang kita akan mempunyai fail konfigurasi bernama com.baeldung.autoservice.TranslationService. Fail ini mengandungi nama-nama kedua penyedia yang memenuhi syarat:

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

3.3. @AutoService dalam Tindakan

Sekarang, semuanya sudah siap. Mari memuatkan penyedia melalui ServiceLoader :

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

The ServiceLoader akan memuatkan setiap pembekal yang ditakrif dalam fail konfigurasi.

Mari periksa jumlah penyedia yang dimuatkan:

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

Dengan kata lain, ServiceLoader telah memuatkan semua contoh penyedia. Oleh itu, adalah tugas kita untuk memilih salah satu daripadanya.

Jadi sekarang, mari pilih salah satu penyedia dan kemudian hubungi kaedah perkhidmatan untuk melihat sama ada pemuat berfungsi seperti yang diharapkan:

TranslationService googleService = StreamSupport.stream(loader.spliterator(), false) .filter(p -> p.getClass().getSimpleName().equals("GoogleTranslationServiceProvider")) .findFirst() .get(); String message = "message"; assertEquals(message + " (translated by Google)", googleService.translate(message, null, null));

4. Kesimpulan

Dalam artikel ini, kami menerangkan perpustakaan Perkhidmatan Auto Google dan juga berlatih dengan contoh sederhana.

Google AutoService adalah pustaka penjana kod sumber yang berguna tetapi mudah. Ini menyelamatkan kita dari membuat dan mengedit fail konfigurasi penyedia perkhidmatan . Ini juga menjamin bahawa tidak akan ada fail yang salah ditulis atau salah tempat.

Kod sumber tutorial ini terdapat di projek GitHub seperti biasa.