Panduan Cepat untuk Anotasi @Lazy Spring

1. Ikhtisar

Secara default, Spring membuat semua kacang tunggal dengan penuh semangat saat startup / bootstrap konteks aplikasi. Alasan di balik ini sederhana: untuk menghindari dan mendeteksi semua kemungkinan kesalahan dengan segera, bukan pada waktu proses.

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

Dalam tutorial singkat ini, kita akan membahas anotasi @Lazy Spring .

2. Inisialisasi Malas

The @Lazy penjelasan telah hadir sejak musim semi versi 3.0. Ada beberapa cara untuk memberi tahu wadah IoC untuk menginisialisasi kacang dengan malas.

2.1. @Configuration Kelas

Saat kita meletakkan anotasi @Lazy di atas kelas @Configuration , ini menunjukkan bahwa semua metode dengan anotasi @Bean harus dimuat dengan lambat .

Ini sama dengan atribut default-lazy-init = "true " konfigurasi berbasis XML .

Mari kita 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 uji fungsionalitasnya:

@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 ketika kita memintanya untuk pertama kali:

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

Untuk menerapkan ini hanya ke 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 depan, periksa panduan ini untuk @ Autowired dan @Component penjelasan.

Di sini, untuk menginisialisasi kacang malas, kami mereferensikannya dari yang lain.

Kacang yang ingin kita muat dengan malas:

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

Dan itu referensi:

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

Perhatikan, @Lazy bersifat wajib di kedua tempat.

Dengan anotasi @Component di kelas City dan saat mereferensikannya dengan @Autowired:

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

Di sini, para Kota kacang diinisialisasi hanya ketika kita sebut getCityInstance () metode.

3. Kesimpulan

Dalam tutorial singkat ini, kita mempelajari dasar-dasar anotasi @Lazy Spring . Kami memeriksa beberapa cara untuk mengkonfigurasi dan menggunakannya.

Seperti biasa, kode lengkap untuk panduan ini tersedia di GitHub.