Корінни та дочірні контексти Перш ніж читати далі, будь ласка, розумійте це -
Весна може мати декілька контекстів одночасно. Один з них буде кореневим контекстом, а всі інші контексти - це дочірніми контекстами.
Усі дочірні контексти можуть отримати доступ до бобів, визначених у кореневому контексті; але навпаки не вірно. Корінний контекст не може отримати доступ до дочірніх бобів.
ApplicationContext:
applicationContext.xml - це коренева конфігурація контексту для кожної веб-програми. Весна завантажує файл applicationContext.xml і створює ApplicationContext для всієї програми. Буде лише один контекст програми для кожної веб-програми. Якщо ви явно не оголосили ім’я файлу конфігурації контексту в web.xml за допомогою параметраComfigLocation, параметр Spring буде шукати applicationContext.xml у папці WEB-INF та видалить FileNotFoundException, якщо він не зміг знайти цей файл.
ContextLoaderListener Виконує фактичну роботу ініціалізації для контексту кореневої програми. Читає контекст-парам "contextConfigLocation" і передає його значення екземпляру контексту, аналізуючи його на потенційно декілька шляхів до файлів, які можна розділити будь-якою кількістю коми і пробілів, наприклад "WEB-INF / applicationContext1.xml, WEB-INF / applicationContext2.xml ”. ContextLoaderListener необов’язковий. Просто для зауваження тут: ви можете завантажувати додаток Spring, не налаштовуючи ContextLoaderListener, просто основний мінімум web.xml за допомогою DispatcherServlet.
DispatcherServlet DispatcherServlet по суті є сервлетом (він розширює HttpServlet), основною метою якого є обробка вхідних веб-запитів, що відповідають налаштованому шаблону URL. Знадобиться вхідний URI і знайти правильну комбінацію контролера та перегляду. Так це передній контролер.
Коли ви визначаєте DispatcherServlet у весняній конфігурації, ви надаєте XML-файл із записами класів контролерів, переглядає відображення тощо, використовуючи атрибут contextConfigLocation.
Крім ApplicationContext, в одній веб-програмі може бути декілька WebApplicationContext. Простими словами, кожен DispatcherServlet пов'язаний з одним WebApplicationContext. Файл xxx-servlet.xml специфічний для DispatcherServlet, а веб-додаток може мати більше одного DispatcherServlet, налаштованого для обробки запитів. У таких сценаріях кожен DispatcherServlet матиме окремий xxx-servlet.xml. Але, applicationContext.xml буде загальним для всіх файлів конфігурації сервлетів. Весна за замовчуванням завантажить файл з назвою "xxx-servlet.xml" з папки WEB-INF webapps, де xxx - ім'я сервлета в web.xml. Якщо ви хочете змінити ім'я цього імені файлу або змінити місце розташування, додайте ініціатор-парам з контекстуванням ConfigLocation як ім'я парам.
Порівняння та відношення між ними:
ContextLoaderListener vs DispatcherServlet
ContextLoaderListener створює контекст кореневої програми. Записи DispatcherServlet створюють один дочірній контекст програми на кожну запис сервлета. Дочірні контексти можуть отримати доступ до бобів, визначених у кореневому контексті. Квасоля в кореневому контексті не може отримати доступ до бобів у дочірніх контекстах (безпосередньо). Усі контексти додаються до ServletContext. Ви можете отримати доступ до кореневого контексту за допомогою класу WebApplicationContextUtils.
Прочитавши весняну документацію, розуміємо наступне:
a) Контексти програми є ієрархіальними, а також WebApplicationContexts. Зверніться до документації тут.
b) ContextLoaderListener створює кореневий веб-додаток-контекст для веб-програми та розміщує його в ServletContext. Цей контекст може бути використаний для завантаження та вивантаження пружинних бобів, незалежно від того, яка технологія використовується в шарі контролера (Struts або Spring MVC).
c) DispatcherServlet створює власний WebApplicationContext, а обробники / контролери / вирішальники перегляду керуються цим контекстом.
d) Коли ContextLoaderListener використовується в тандемі з DispatcherServlet, кореневий веб-додаток-контекст створюється спочатку, як було сказано раніше, а дочірній контекст також створюється DispatcherSerlvet і додається до кореневого контексту програми. Зверніться до документації тут.
Коли ми працюємо з Spring MVC і також використовуємо Spring на рівні послуг, ми надаємо два контексти програми. Перший налаштований за допомогою ContextLoaderListener, а другий за допомогою DispatcherServlet
Як правило, ви визначатимете всі пов'язані з MVC боби (контролер та перегляди тощо) у контексті DispatcherServlet, а також всі наскрізні боби, такі як безпека, транзакції, послуги тощо у кореневому контексті ContextLoaderListener.
Докладнішу інформацію див. На веб-сторінці :
https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html