@Order pada musim bunga

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan belajar mengenai anotasi @Order Spring . The @Order anotasi mentakrifkan perintah itu menyusun komponen beranotasi atau kacang.

Ia mempunyai argumen nilai pilihan yang menentukan susunan komponen; nilai lalai adalah Tertib.LOWEST_PRECEDENCE . Ini menandakan bahawa komponen mempunyai keutamaan paling rendah di antara semua komponen yang disusun yang lain.

Begitu juga, nilai Ordered.HIGHEST_PRECEDENCE boleh digunakan untuk mengatasi keutamaan tertinggi di antara komponen.

2. Bilakah Menggunakan @Order

Sebelum Spring 4.0, anotasi @Order digunakan hanya untuk perintah pelaksanaan AspectJ. Ini bermaksud nasihat pesanan tertinggi akan dijalankan terlebih dahulu.

Sejak Spring 4.0, ia menyokong susunan komponen yang disuntik ke koleksi. Akibatnya, Spring akan menyuntik biji kabel automatik jenis yang sama berdasarkan nilai pesanannya.

Mari kita menerokainya dengan contoh ringkas.

3. Cara Menggunakan @Order

Pertama sekali, mari siapkan projek kami dengan antara muka dan kelas yang berkaitan.

3.1. Penciptaan Antara Muka

Mari buat antara muka Penarafan yang menentukan penarafan produk:

public interface Rating { int getRating(); }

3.2. Penciptaan Komponen

Akhirnya, mari buat tiga komponen yang menentukan penarafan 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 bahawa kelas Purata mempunyai keutamaan terendah kerana nilainya ditimpa.

4. Menguji Contoh Kita

Sehingga kini, kami telah membuat semua komponen dan antara muka yang diperlukan untuk menguji anotasi @Order . Sekarang, mari kita mengujinya untuk mengesahkan bahawa ia 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 mengetahui tentang anotasi @Order dalam artikel ringkas ini. Kami dapat mengetahui penerapan @Order dalam pelbagai kes penggunaan - di mana pesanan komponen automatik berwayar penting. Salah satu contohnya ialah penapis permintaan Spring.

Oleh kerana pengaruhnya terhadap keutamaan suntikan, nampaknya ia juga mempengaruhi pesanan permulaan tunggal. Tetapi sebaliknya, hubungan ketergantungan dan deklarasi @DependsOn menentukan susunan permulaan tunggal.

Semua contoh yang dinyatakan dalam tutorial ini boleh didapati di Github.