@Component vs @Rository dan @Service di Spring

1. Perkenalan

Dalam tutorial singkat ini, kita akan belajar tentang perbedaan antara @Component, @Repository, @Service anotasi, di Spring Framework.

2. Anotasi Musim Semi

Di sebagian besar aplikasi umum, kami memiliki lapisan berbeda seperti akses data, presentasi, layanan, bisnis, dll.

Dan, di setiap lapisan, kami memiliki berbagai biji. Sederhananya, untuk mendeteksinya secara otomatis, Spring menggunakan anotasi pemindaian jalur kelas .

Kemudian, itu mendaftarkan setiap kacang di ApplicationContext .

Berikut ikhtisar singkat dari beberapa anotasi ini:

  • @Component adalah stereotip umum untuk komponen yang dikelola Spring
  • @Service menganotasi kelas-kelas pada lapisan layanan
  • @Repository menganotasi kelas di lapisan persistensi, yang akan bertindak sebagai repositori database

Kami sudah memiliki artikel panjang tentang anotasi ini. Jadi kami akan tetap fokus hanya pada perbedaan di antara mereka.

3. Apa yang Berbeda?

Perbedaan utama antara stereotip ini adalah digunakan untuk klasifikasi yang berbeda. Saat kita membuat anotasi kelas untuk deteksi otomatis, kita harus menggunakan stereotip masing-masing.

Sekarang, mari kita bahas lebih detail.

3.1. @Komponen

Kita dapat menggunakan @Component di seluruh aplikasi untuk menandai kacang sebagai komponen yang dikelola Spring . Spring hanya mengambil dan mendaftarkan kacang dengan @Component dan tidak mencari @Service dan @Repository secara umum.

Mereka terdaftar di ApplicationContext karena mereka sendiri dianotasi dengan @Component :

@Component public @interface Service { } 
@Component public @interface Repository { } 

@Service dan @Repository adalah kasus khusus dari @Component . Mereka secara teknis sama tetapi kami menggunakannya untuk tujuan yang berbeda.

3.2. @Gudang

Tugas @Repository adalah menangkap pengecualian khusus persistensi dan menampilkannya kembali sebagai salah satu pengecualian Spring yang tidak dicentang .

Untuk Musim Semi ini menyediakan PersistenceExceptionTranslationPostProcessor , yang perlu ditambahkan dalam konteks aplikasi kita:

Prosesor postingan kacang ini menambahkan penasehat ke kacang apa pun yang dianotasi dengan @Repository.

3.3. @Layanan

Kami menandai kacang dengan @Service untuk menunjukkan bahwa itu memegang logika bisnis . Jadi tidak ada spesialisasi lain kecuali menggunakannya di lapisan layanan.

4. Kesimpulan

Dalam artikel ini, kita belajar tentang perbedaan antara @Component, @Repository, @Service anotasi . Kami memeriksa setiap anotasi secara terpisah dengan area penggunaannya.

Sebagai kesimpulan, sebaiknya selalu memilih anotasi berdasarkan konvensi lapisannya.