Saya menggunakan Spring MVC untuk aplikasi web saya. Kacang saya ditulis dalam spring-servlet.xml
file " "
Sekarang saya memiliki kelas MyClass
dan saya ingin mengakses kelas ini menggunakan kacang musim semi
Di bawah spring-servlet.xml
saya telah menulis
<bean id="myClass" class="com.lynas.MyClass" />
Sekarang saya perlu mengakses ini menggunakan ApplicationContext
ApplicationContext context = ??
Sehingga saya bisa melakukannya
MyClass myClass = (MyClass) context.getBean("myClass");
Bagaimana cara melakukannya??
java
spring
spring-mvc
servlets
LynA
sumber
sumber
Jawaban:
Cukup suntik ..
atau terapkan antarmuka ini: ApplicationContextAware
sumber
ApplicationContextProvider.java
Jawaban berikut tampaknya menjadi solusi paling andal untuk ini.Saya pikir tautan ini menunjukkan cara terbaik untuk mendapatkan konteks aplikasi di mana saja, bahkan di kelas non-kacang. Saya merasa sangat berguna. Semoga hal yang sama untuk Anda. Di bawah ini adalah kode abstraknya
Buat kelas baru ApplicationContextProvider.java
Tambahkan entri di application-context.xml
Dalam kasus anotasi (bukan application-context.xml)
Dapatkan konteksnya seperti ini
Bersulang!!
sumber
ApplicationContextProvider.getApplicationContext()
. Kemudian, ketika saatnya membutuhkan konteks aplikasi saat ini, saya meminta:ApplicationContextProvider appContext = ApplicationContextProvider.getApplicationContext()
@Component
onApplicationContextProvider
dapat menghindari konfigurasi diaplication-context.xml
Jika Anda perlu mengakses konteks dari dalam HttpServlet yang tidak dibuat oleh Spring (dan karenanya baik @Autowire maupun ApplicationContextAware tidak akan berfungsi) ...
atau
Adapun beberapa balasan lainnya, pikirkan dua kali sebelum Anda melakukan ini:
... karena ini tidak memberi Anda konteks saat ini, melainkan membuat contoh lain untuk Anda. Yang berarti 1) potongan memori yang signifikan dan 2) kacang tidak dibagikan di antara dua konteks aplikasi ini.
sumber
Jika Anda mengimplementasikan kelas yang tidak dibuat oleh Spring, seperti JsonDeserializer, Anda dapat menggunakan:
sumber
ContextLoader.getCurrentWebApplicationContext()
Tambahkan ini ke kode Anda
Ini hanya akan menyuntikkan myClass ke dalam aplikasi Anda
sumber
berdasarkan jawaban Vivek, tapi menurut saya yang berikut akan lebih baik:
Menulis dari metode instance ke kolom statis adalah praktik yang buruk dan berbahaya jika beberapa instance sedang dimanipulasi.
sumber
org.springframework.core.io.ContextResource
antarmuka. Saya menyarankan untuk memilih nama yang berbeda untuk kelas batinContextResource
hanya untuk menghindari kekacauan.Ada banyak cara untuk mendapatkan konteks aplikasi dalam aplikasi Spring. Itu diberikan di bawah ini:
Melalui ApplicationContextAware :
Di sini
setApplicationContext(ApplicationContext applicationContext)
metode Anda akan mendapatkan applicationContextMelalui Autowired :
Di sini
@Autowired
kata kunci akan memberikan applicationContext.Untuk info lebih lanjut kunjungi utas ini
Terima kasih :)
sumber
Cara lain adalah dengan menginjeksi applicationContext melalui servlet.
Ini adalah contoh cara memasukkan dependensi saat menggunakan layanan web Spring.
Cara alternatif adalah dengan menambahkan Konteks aplikasi di web.xml Anda seperti yang ditunjukkan di bawah ini
Pada dasarnya Anda mencoba memberi tahu servlet bahwa ia harus mencari kacang yang didefinisikan dalam file konteks ini.
sumber
Langkah 1 : Masukkan kode berikut di kelas
Langkah 2 : Tulis Getter & Setter
Langkah 3 : tentukan autowire = "byType" dalam file xml di mana bean didefinisikan
sumber
Bahkan setelah menambahkan @Autowire jika kelas Anda bukan RestController atau Kelas Konfigurasi, objek applicationContext tetap bernilai null. Mencoba Membuat kelas baru dengan di bawah ini dan berfungsi dengan baik:
Anda kemudian dapat mengimplementasikan metode pengambil di kelas yang sama sesuai kebutuhan Anda seperti mendapatkan referensi kelas yang Diimplementasikan dengan:
sumber
Kemudian Anda dapat mengambil kacang:
Referensi: springbyexample.org
sumber