Saya memiliki kasus penggunaan di mana saya perlu memanggil metode (non-statis) di kacang hanya sekali di ApplicationContext memuat. Apakah boleh, jika saya menggunakan MethodInvokingFactoryBean untuk ini? Atau kita punya solusi yang lebih baik?
Sebagai catatan, saya menggunakan ConfigContextLoaderListener untuk memuat Konteks Aplikasi dalam aplikasi web. Dan ingin, bahwa jika kacang 'A' dipakai hanya panggil methodA () sekali.
Bagaimana ini bisa dilakukan dengan baik?
Untuk memperluas saran @PostConstruct di jawaban lain, ini benar-benar solusi terbaik, menurut saya.
sumber
<context:component-scan>
juga berfungsi, dan dapat berguna untuk mengurangi waktu startup jika Anda memiliki pustaka non-Spring yang besar di classpath Anda.Ada tiga pendekatan yang berbeda untuk dipertimbangkan, seperti yang dijelaskan dalam referensi
Gunakan atribut init-metode
Pro:
Cons:
Terapkan InisialisasiBean
Pro:
Cons:
Gunakan JSR-250 @PostConstruct anotasi gaya hidup
Pro:
Cons:
sumber
@PostConstruct
tepat karena ini adalah bagian dari kelas yang membutuhkan metode memanggil pada akhir pemrosesan inisialisasi.Sudahkah Anda mencoba implementasi
InitializingBean
? Kedengarannya persis seperti apa yang Anda cari.Kelemahannya adalah kacang Anda menjadi Spring-aware, tetapi di sebagian besar aplikasi itu tidak terlalu buruk.
sumber
Anda bisa menggunakan BeanPostProcessor kustom dalam konteks aplikasi Anda untuk melakukannya. Atau jika Anda tidak keberatan menerapkan antarmuka Spring di kacang Anda, Anda bisa menggunakan antarmuka InitializingBean atau direktif "init-metode" (tautan yang sama).
sumber
Untuk lebih jauh menghilangkan kebingungan tentang dua pendekatan yaitu penggunaan
@PostConstruct
daninit-method="init"
Dari pengalaman pribadi, saya menyadari bahwa menggunakan (1) hanya berfungsi dalam wadah servlet, sementara (2) bekerja di lingkungan apa pun, bahkan dalam aplikasi desktop. Jadi, jika Anda akan menggunakan Spring dalam aplikasi mandiri, Anda harus menggunakan (2) untuk melakukan "panggil metode ini setelah inisialisasi.
sumber
@PostConstruct
(ketika digunakan dalam aplikasi berbasis Musim Semi) terkait dengan umur konteks Musim Semi yang dimiliki. Konteks semacam itu dapat digunakan dalam semua jenis aplikasi.