Как объяснено в документации , каждый сервлет диспетчера имеет свой собственный контекст приложения, в котором вы обычно определяете контроллеры, средства разрешения представления и т. Д. И который наследует (и может переопределять компоненты) из контекста корневого приложения. обычно содержит определения источников данных, сервисы среднего уровня и т. д.
ContextLoaderListener, как объясняет его документация , используется для запуска и завершения работы корневого контекста приложения Spring (от которого наследуются контексты сервлета).
Это также полезно, когда вы хотите использовать Spring для своего среднего уровня, но вы не хотите использовать Spring MVC в качестве уровня презентации. В этом случае вы только определяете контекст корневого приложения, используя ContextLoaderListener.