Konteks root dan anak Sebelum membaca lebih lanjut, harap dipahami bahwa -
Musim semi dapat memiliki banyak konteks sekaligus. Salah satunya adalah konteks root, dan semua konteks lainnya adalah konteks anak.
Semua konteks anak dapat mengakses kacang yang didefinisikan dalam konteks root; tetapi kebalikannya tidak benar. Konteks root tidak dapat mengakses kacang konteks anak.
ApplicationContext:
applicationContext.xml adalah konfigurasi konteks root untuk setiap aplikasi web. Pegas memuat file applicationContext.xml dan membuat ApplicationContext untuk seluruh aplikasi. Hanya akan ada satu konteks aplikasi per aplikasi web. Jika Anda tidak secara eksplisit mendeklarasikan nama file konfigurasi konteks di web.xml menggunakan param contextConfigLocation, Spring akan mencari applicationContext.xml di bawah folder WEB-INF dan melempar FileNotFoundException jika tidak dapat menemukan file ini.
ContextLoaderListener Melakukan pekerjaan inisialisasi aktual untuk konteks aplikasi root. Membaca konteks-param "contextConfigLocation" dan meneruskan nilainya ke instance konteks, mem-parsingnya ke beberapa path file yang berpotensi yang dapat dipisahkan oleh sejumlah koma dan spasi, misalnya "WEB-INF / applicationContext1.xml, WEB-INF / applicationContext2.xml ”. ContextLoaderListener adalah opsional. Hanya untuk menjelaskan di sini: Anda dapat mem-boot aplikasi Musim Semi tanpa pernah mengkonfigurasi ContextLoaderListener, hanya web.xml minimum dasar dengan DispatcherServlet.
DispatcherServlet DispatcherServlet pada dasarnya adalah Servlet (ini meluas HttpServlet) yang tujuan utamanya adalah untuk menangani permintaan web masuk yang cocok dengan pola URL yang dikonfigurasi. Dibutuhkan URI yang masuk dan menemukan kombinasi yang tepat dari pengontrol dan tampilan. Jadi itu adalah pengontrol depan.
Ketika Anda menentukan DispatcherServlet dalam konfigurasi pegas, Anda memberikan file XML dengan entri kelas controller, melihat pemetaan dll menggunakan atribut contextConfigLocation.
WebApplicationContext Terlepas dari ApplicationContext, ada beberapa WebApplicationContext dalam satu aplikasi web. Dengan kata sederhana, setiap DispatcherServlet terkait dengan WebApplicationContext tunggal. file xxx-servlet.xml khusus untuk DispatcherServlet dan aplikasi web dapat memiliki lebih dari satu DispatcherServlet yang dikonfigurasi untuk menangani permintaan. Dalam skenario seperti itu, setiap DispatcherServlet akan memiliki xxx-servlet.xml yang terpisah dikonfigurasi. Tetapi, applicationContext.xml akan umum untuk semua file konfigurasi servlet. Pegas akan secara default memuat file bernama "xxx-servlet.xml" dari folder webapp WEB-INF Anda di mana xxx adalah nama servlet di web.xml. Jika Anda ingin mengubah nama nama file itu atau mengubah lokasi, tambahkan initi-param dengan contextConfigLocation sebagai nama param.
Perbandingan dan hubungan di antara mereka:
ContextLoaderListener vs DispatcherServlet
ContextLoaderListener membuat konteks aplikasi root. Entri DispatcherServlet membuat konteks aplikasi satu anak per entri servlet. Konteks anak dapat mengakses kacang yang didefinisikan dalam konteks root. Kacang dalam konteks root tidak dapat mengakses kacang dalam konteks anak (langsung). Semua konteks ditambahkan ke ServletContext. Anda dapat mengakses konteks root menggunakan kelas WebApplicationContextUtils.
Setelah membaca dokumentasi Spring, berikut ini adalah pengertiannya:
a) Aplikasi-Konteks adalah hierarkis dan begitu juga WebApplicationContexts. Lihat dokumentasi di sini.
b) ContextLoaderListener membuat root web-application-context untuk aplikasi web dan meletakkannya di ServletContext. Konteks ini dapat digunakan untuk memuat dan membongkar biji yang dikelola pegas terlepas dari teknologi apa yang digunakan dalam lapisan pengontrol (Struts atau Spring MVC).
c) DispatcherServlet membuat WebApplicationContext sendiri dan handler / controllers / view-resolvers dikelola oleh konteks ini.
d) Ketika ContextLoaderListener digunakan bersama-sama dengan DispatcherServlet, konteks web-aplikasi root dibuat terlebih dahulu seperti yang dikatakan sebelumnya dan konteks anak-anak juga dibuat oleh DispatcherSerlvet dan dilampirkan ke konteks aplikasi root. Lihat dokumentasi di sini.
Ketika kami bekerja dengan Spring MVC dan juga menggunakan Spring di lapisan layanan, kami menyediakan dua konteks aplikasi. Yang pertama dikonfigurasi menggunakan ContextLoaderListener dan yang lainnya dengan DispatcherServlet
Secara umum, Anda akan mendefinisikan semua kacang terkait MVC (controller dan tampilan dll) dalam konteks DispatcherServlet, dan semua kacang lintas-potong seperti keamanan, transaksi, layanan dll pada konteks akar oleh ContextLoaderListener.
Lihat ini untuk detail lebih lanjut:
https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html