Panduan Pantas untuk Anotasi Musim Bunga @ Malas

1. Gambaran keseluruhan

Secara lalai, Spring membuat semua kacang tunggal dengan penuh semangat pada permulaan / bootstrap konteks aplikasi. Sebab di sebalik ini adalah mudah: untuk mengelakkan dan mengesan semua kesilapan yang mungkin berlaku dan bukannya pada waktu proses.

Namun, ada kes-kes ketika kita perlu membuat kacang, bukan pada permulaan konteks aplikasi, tetapi ketika kita memintanya.

Dalam tutorial ringkas ini, kita akan membincangkan anotasi @Lazy Spring .

2. Permulaan Malas

The @Lazy anotasi telah hadir sejak Spring versi 3.0. Terdapat beberapa cara untuk memberitahu bekas IoC untuk memulakan kacang dengan malas.

2.1. @Konfigurasi Kelas

Apabila kita meletakkan @Lazy anotasi atas @Configuration kelas, ia menunjukkan bahawa semua kaedah dengan @Bean anotasi perlu dimuatkan malas .

Ini adalah setara dengan atribut default-lazy-init = "true " konfigurasi berasaskan XML .

Mari lihat di sini:

@Lazy @Configuration @ComponentScan(basePackages = "com.baeldung.lazy") public class AppConfig { @Bean public Region getRegion(){ return new Region(); } @Bean public Country getCountry(){ return new Country(); } }

Sekarang mari kita menguji kefungsiannya:

@Test public void givenLazyAnnotation_whenConfigClass_thenLazyAll() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(AppConfig.class); ctx.refresh(); ctx.getBean(Region.class); ctx.getBean(Country.class); }

Seperti yang kita lihat, semua kacang dibuat hanya apabila kita memintanya untuk pertama kalinya:

Bean factory for ...AnnotationConfigApplicationContext: ...DefaultListableBeanFactory: [...]; // application context started Region bean initialized Country bean initialized

Untuk menerapkannya hanya pada kacang tertentu, mari hapus @Lazy dari kelas.

Kemudian kami menambahkannya ke konfigurasi kacang yang diinginkan:

@Bean @Lazy(true) public Region getRegion(){ return new Region(); }

2.2 Dengan @Autowired

Sebelum pergi ke hadapan, lihat panduan ini untuk @Autowired dan @Component penjelasan.

Di sini, untuk memulakan kacang malas, kami merujuknya dari kacang yang lain.

Kacang yang ingin kita muatkan dengan malas:

@Lazy @Component public class City { public City() { System.out.println("City bean initialized"); } }

Dan rujukannya:

public class Region { @Lazy @Autowired private City city; public Region() { System.out.println("Region bean initialized"); } public City getCityInstance() { return city; } }

Perhatikan, bahawa @Lazy adalah wajib di kedua tempat.

Dengan anotasi @Component pada kelas City dan semasa merujuknya dengan @Autowired:

@Test public void givenLazyAnnotation_whenAutowire_thenLazyBean() { // load up ctx appication context Region region = ctx.getBean(Region.class); region.getCityInstance(); }

Di sini, di Bandar kacang adalah dimulakan hanya apabila kita panggil getCityInstance () kaedah.

3. Kesimpulannya

Dalam tutorial ringkas ini, kami mempelajari asas-asas anotasi @Lazy Spring . Kami meneliti beberapa cara untuk mengkonfigurasi dan menggunakannya.

Seperti biasa, kod lengkap untuk panduan ini terdapat di GitHub.