Есть ли у вас другие весенние фильтры или jsp-страницы в вашем web.xml, не показанные в вашем фрагменте кода?
Я прошу ответить на ваш вопрос, потому что я верю, что эта цитата из Весенняя документация может объяснить, что может происходить ...
"В веб-фреймворке MVC каждый
ДиспетчерСервлет имеет свой
WebApplicationContext, который наследует
все бобы уже определены в
root WebApplicationContext. Эти
унаследованные бобы могут быть определены
переопределено в сервлете
область действия и новые специфические для области компоненты
может быть определен локально для данного
экземпляр сервлета. "
Если вы ответили «да» на мой вопрос web.xml, то я предполагаю, что Spring создает корневой WebApplicationContext при создании весеннего фильтра (через ContextLoaderListener). Так что это произойдет ДО ...
Затем, когда создается DispatcherServlet, «contextConfigLocation» ссылается на те же файлы (то есть, на те же имена компонентов), поэтому новый WebApplicationContext получает переопределенные имена компонентов, локальные для этого сервлета!
Интересно, даже если вы ответите "нет", может ли это все равно произойти. Так как вы устанавливаете «contextConfigLocation» (используется ContextLoaderListener) и «переопределяете» его в конфигурации DispatcherServlet; Я предполагаю, что Spring не проверяет, используют ли эти конфигурации один и тот же набор файлов.
Вы можете запустить эти сценарии через отладчик и установить точки останова в методах WebApplicationContext, чтобы точно это выяснить.
Обход:
Чтобы решить проблему, либо:
1) убедитесь, что ваши 2 contextConfigLocations не перекрываются в используемых ими файлах
Или:
2) выделить компонент планирования в его собственном XML-файле и убедиться, что на него ссылается только один из 2 contextConfigLocations