Google AutoService

1. Perkenalan

Dalam tutorial singkat ini, kami akan menjelaskan secara singkat Layanan Otomatis Google.

Ini adalah pustaka prosesor anotasi yang membantu kami membuat file konfigurasi Antarmuka Penyedia Layanan Java (SPI).

2. SPI Jawa

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

Java SPI menggunakan file konfigurasi untuk menemukan dan memuat implementasi konkret dari antarmuka penyedia layanan yang diberikan. Menyesuaikan aplikasi dengan cepat adalah salah satu kemampuan utamanya.

Di sisi lain, mudah untuk salah konfigurasi dan juga agak membingungkan bagi kami untuk menambah atau mengedit file konfigurasi. Langkah ini juga mudah dilupakan.

Selain itu, selalu ada risiko kesalahan ketik yang mungkin tidak kami perhatikan, karena file konfigurasi tidak dipertimbangkan oleh kompilator.

3. Layanan Otomatis Google

Google AutoService adalah alat pembuat kode sumber terbuka, yang dikembangkan di bawah proyek Google Auto. Ada juga dua alat lain selain AutoService: AutoValue dan AutoFactory.

Tujuan dari pustaka ini adalah untuk menghemat tenaga dan waktu dan, pada saat yang sama, untuk mencegah kesalahan konfigurasi .

3.1. Pengaturan Maven

Pertama, mari tambahkan ketergantungan layanan otomatis di aplikasi kita. Kita dapat mengatur ketergantungan sebagai opsional karena kita hanya membutuhkannya pada waktu kompilasi:

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

3.2. @ Contoh LayananOtomatis

Kedua, kami akan membuat antarmuka penyedia layanan.

Anggaplah aplikasi kita memiliki fitur terjemahan. Kami bertujuan untuk membuat fitur ini dapat diperluas. Jadi, kita dapat menyambungkan komponen penyedia layanan terjemahan apa pun dengan mudah:

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

Aplikasi kami akan menggunakan antarmuka ini sebagai titik ekstensi. Implementasi pada classpath akan dimasukkan sebagai komponen.

Selanjutnya, kami akan mengimplementasikan layanan ini dengan dua penyedia terjemahan yang berbeda 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 saat kompilasi, LayananOtomatis akan mencari anotasi dan membuat file konfigurasi untuk setiap antarmuka dan implementasi yang sesuai.

Hasilnya, sekarang kita akan memiliki file konfigurasi bernama com.baeldung.autoservice.TranslationService. File ini berisi nama yang sepenuhnya memenuhi syarat dari dua penyedia:

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

3.3. @AutoService dalam Aksi

Sekarang semuanya sudah siap. Mari muat penyedia melalui ServiceLoader :

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

The ServiceLoader akan memuat setiap penyedia didefinisikan dalam file konfigurasi.

Mari kita periksa jumlah penyedia yang dimuat:

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

Dengan kata lain, ServiceLoader telah memuat semua contoh penyedia. Oleh karena itu, tugas kita untuk memilih salah satunya.

Jadi sekarang, pilih salah satu penyedia lalu panggil metode layanan untuk melihat apakah loader 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

Pada artikel ini, kami menjelaskan pustaka Google LayananOtomatis dan juga berlatih dengan contoh sederhana.

Google AutoService adalah pustaka pembuat kode sumber yang berguna namun langsung. Ini menyelamatkan kita dari membuat dan mengedit file konfigurasi penyedia layanan . Ini juga menjamin bahwa tidak akan ada file yang salah tulis atau salah letak.

Kode sumber tutorial ini tersedia di proyek GitHub seperti biasa.