@Pesan di Musim Semi

1. Ikhtisar

Dalam tutorial ini, kita akan belajar tentang anotasi @Order Spring . The @Order penjelasan mendefinisikan urutan penyortiran dari komponen dijelaskan atau kacang.

Ini memiliki argumen nilai opsional yang menentukan urutan komponen; nilai defaultnya adalah Ordered.LOWEST_PRECEDENCE . Ini menandai bahwa komponen tersebut memiliki prioritas terendah di antara semua komponen yang dipesan lainnya.

Demikian pula, nilai Ordered.HIGHEST_PRECEDENCE dapat digunakan untuk menimpa prioritas tertinggi di antara komponen.

2. Kapan Menggunakan @Order

Sebelum Musim Semi 4.0, anotasi @Order hanya digunakan untuk urutan eksekusi AspectJ. Artinya, saran tingkat tertinggi akan dijalankan lebih dulu.

Sejak Spring 4.0, ini mendukung pemesanan komponen yang diinjeksi ke koleksi. Hasilnya, Spring akan menyuntikkan kacang kabel otomatis dari jenis yang sama berdasarkan nilai pesanannya.

Mari kita jelajahi dengan contoh singkat.

3. Cara Menggunakan @Order

Pertama-tama, mari kita siapkan proyek kita dengan antarmuka dan kelas yang relevan.

3.1. Pembuatan Antarmuka

Mari buat antarmuka Peringkat yang menentukan peringkat suatu produk:

public interface Rating { int getRating(); }

3.2. Pembuatan Komponen

Terakhir, mari buat tiga komponen yang menentukan peringkat beberapa produk:

@Component @Order(1) public class Excellent implements Rating { @Override public int getRating() { return 1; } } @Component @Order(2) public class Good implements Rating { @Override public int getRating() { return 2; } } @Component @Order(Ordered.LOWEST_PRECEDENCE) public class Average implements Rating { @Override public int getRating() { return 3; } }

Perhatikan bahwa kelas Average memiliki prioritas terendah karena nilai yang diganti.

4. Menguji Teladan Kita

Hingga saat ini, kami telah membuat semua komponen yang diperlukan dan antarmuka untuk menguji anotasi @Order . Sekarang, mari kita uji untuk memastikan bahwa itu berfungsi seperti yang diharapkan:

public class RatingRetrieverUnitTest { @Autowired private List ratings; @Test public void givenOrder_whenInjected_thenByOrderValue() { assertThat(ratings.get(0).getRating(), is(equalTo(1))); assertThat(ratings.get(1).getRating(), is(equalTo(2))); assertThat(ratings.get(2).getRating(), is(equalTo(3))); } }

5. Kesimpulan

Kami telah mempelajari tentang anotasi @Order di artikel singkat ini. Kami dapat menemukan aplikasi @Order dalam berbagai kasus penggunaan - di mana urutan komponen kabel otomatis penting. Salah satu contohnya adalah filter permintaan Spring.

Karena pengaruhnya pada prioritas injeksi, ini mungkin tampak seperti itu mungkin mempengaruhi urutan startup tunggal juga. Namun sebaliknya, hubungan ketergantungan dan deklarasi @DependsOn menentukan urutan startup tunggal.

Semua contoh yang disebutkan dalam tutorial ini dapat ditemukan di Github.