Baru-baru ini saya membaca tentang @ImplementedBy
anotasi yang tersedia di Google Guice . Hal ini memungkinkan programmer untuk menentukan pengikatan antara antarmuka dan implementasinya untuk digunakan di masa depan dalam injeksi dependensi. Ini adalah contoh penjilidan just-in-time .
Saya cukup terbiasa mendefinisikan binding eksplisit dalam modul saya, menggunakan sintaks berikut:
bind(SomeInterface.class).to(SomeInterfaceImplementation.class);
Menurut dokumentasi, ini setara dengan penggunaan @ImplementedBy
anotasi berikut:
@ImplementedBy(SomeInterfaceImplementation.class)
public interface SomeInterface {
//method declarations
}
Satu-satunya keuntungan yang saya dapat lihat di sini adalah bahwa kode ini sedikit lebih pendek. Pada saat yang sama, pendekatan ini memiliki kelemahan yang ditunjukkan oleh dokumen yang sama:
Gunakan
@ImplementedBy
dengan hati-hati; itu menambah ketergantungan waktu kompilasi dari antarmuka ke implementasinya.
Ketergantungan seperti itu mungkin tidak menjadi masalah dalam banyak kasus tapi saya pribadi melihatnya sebagai bau kode.
Kasus penggunaan apa yang membuat @ImplementedBy
anotasi layak digunakan?
Salah satu cara yang mungkin tampaknya adalah menggunakannya dalam kode perpustakaan atau kerangka kerja. Seperti dijelaskan dalam dokumen, anotasi dapat memberikan pengikatan default yang mudah ditimpa oleh yang eksplisit.
Jika suatu tipe ada dalam kedua
bind()
pernyataan (sebagai argumen pertama) dan memiliki@ImplementedBy
anotasi,bind()
pernyataan tersebut digunakan. Anotasi menyarankan implementasi standar yang dapat ditimpa dengan pengikatan.
Dengan cara ini, sebagai pengembang perpustakaan, saya dapat memberikan kepada pengguna saya pengikatan di luar kotak yang dapat dikustomisasi di suatu tempat dalam kode klien.
Apakah ini satu-satunya alasan agar anotasi itu ada? Atau ada sesuatu yang saya lewatkan? Bisakah saya mendapatkan sesuatu dengan menggunakannya dalam kode yang hanya merupakan aplikasi yang mengurus beberapa logika bisnis dan bukan perpustakaan / kerangka kerja yang akan diperluas?