Как отладить Spring NoSuchBeanDefinitionException

У нас есть приложение Spring (не являющееся веб-приложением), которое выдает исключение NoSuchBeanDefinitionException при запуске тестов в нашем Linux-окне непрерывной интеграции CruiseControl. Тест отлично работает в Windows в Eclipse.

Исключение выбрасывается в метод getBean ():

ApplicationContext context = new ClassPathXmlApplicationContext(CONTEXT_FILE);

MyBean bean = (MyBean)context.getBean("myBean");

Файл контекста довольно большой и сложный. Файл контекста находится в пути к классам, и Spring его находит. Я бы предпочел, чтобы Spring генерировал исключение при попытке загрузить файл контекста и построить зависимости, чтобы мы могли понять, с чего начать. Есть ли способ заставить Spring генерировать исключение во время создания контекста?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
14 697
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы уверены, что в CONTEXT_FILE есть компонент с именем «myBean»? Вы используете более одного файла контекста? Включили ли вы ведение журнала Spring, чтобы убедиться, что CONTEXT_FILE загружается правильно, и, кроме того, чем файл, который Spring загружает из пути к классам, является именно тем файлом, который, по вашему мнению, он должен загружаться?

Я думаю, что вы, возможно, ищете неправильное решение своей проблемы - я никогда не видел, чтобы Spring генерировал исключение NoSuchBeanDefinitionException, за исключением случая, когда запрашиваемый вами bean-компонент не определен в контексте, просто как это.

Ответ принят как подходящий

Решено. Создание экземпляра myBean в CONTEXT_FILE произошло после другого bean-компонента, который от него зависел. Это действительно не должно быть проблемой, но я подозреваю, что синтаксический анализатор в Linux должен быть более строгим. В любом случае, изменение порядка определений заставило его работать как в Windows, так и в Linux.

Хорошо, это тоже было причиной моего исключения. Сообщество Spring должно изучить это.

Aditya Peshave 26.11.2014 18:44

У меня такая же проблема. Оказалось, что это была тонкая проблема с путями к классам. В частности, мой путь к классам в Linux был настроен так, что мой каталог конфигурации, содержащий мой файл build.xml, находился после моего каталога x-jars (внешних jars), а некоторые другие beans.xml были взяты из моих x-jar, которые, как в сообщении журнала правильно сказано, что он не содержит требуемого bean-компонента. Было бы полезно, если бы полный путь к файлу beans.xml был записан в журнал с сообщением об ошибке Spring.

Другие вопросы по теме