Spring: как я могу отлаживать исключение BeanCreationNotAllowedException?

Я пытаюсь добавить новый компонент Spring в один из моих проектов. Бин определяется и создается в другом пакете следующим образом:

@Configuration
public class UtilityBeans {
    public static String MY_BEAN_NAME = "my.bean.name";

    @Bean(name = MY_BEAN_NAME)
    public MyUtilBeanClass getMyBeanClass() {
        return new MyUtilBeanClass();
    }
}

Я использую его в своем другом пакете следующим образом:

@Configuration
@Import({
    UtilityBeans.class
)}
...
    @Resource(name = UtilityBeans.MY_BEAN_NAME) 
    private MyUtilBeanClass myUtilBeans;

Во время выполнения я получаю:

ОШИБКА Вызвано: org.springframework.beans.factory.BeanCreationNotAllowedException: ошибка при создании bean-компонента с именем «my.bean.name»: создание одноэлементного bean-компонента не разрешено, пока синглтоны этой фабрики находятся в уничтожении (не запрашивайте bean-компонент из BeanFactory в реализации метода уничтожения!)...

Журналы не дают мне никакой полезной информации, поскольку трассировка стека находится в библиотеке Spring. Как я могу узнать, что не удалось? Это неправильное использование ресурса или неправильное создание самого компонента?

Я использую Spring-4 с JDK8.


person Niru    schedule 29.05.2015    source источник
comment
Для получения дополнительной информации откройте журналы DEBUG/TRACE. Нам нужно что-то более полное. Пожалуйста, предоставьте MCVE.   -  person Sotirios Delimanolis    schedule 30.05.2015
comment
где myBeanConfig в коде, который вы разместили?   -  person coder    schedule 30.05.2015
comment
Извините, моя ошибка в попытке запутать/сузить код. Исправлена ​​​​правильная ошибка, которая происходила.   -  person Niru    schedule 08.06.2015


Ответы (1)


Проблема здесь заключалась в том, что bean-компонент создавался в 2 разных точках в моей конфигурации spring из-за некоторого рефакторинга, и исправление заключалось в удалении дублирующегося кода. У меня был тот же код создания bean-компонента:

@Bean(name = MY_BEAN_NAME)
public MyUtilBeanClass getMyBeanClass() {
    return new MyUtilBeanClass();
}

... в другом классе я наполовину провел рефакторинг. В этом случае моя ошибка заключалась в том, что я не провел поиск по всем создаваемым файлам журнала. Исключения были разделены, а затем закопаны в 2 разных журнала: один для запуска сервера и один для времени выполнения приложения. Вышеупомянутое исключение было опубликовано в журнале приложений. Другие журналы содержали соответствующее исключение, в котором говорилось, что создание повторяющегося компонента не удалось, и исправление заключалось в удалении повторяющегося кода.

person Niru    schedule 08.06.2015