Весна создает два экземпляра бобов - PullRequest
1 голос
/ 11 августа 2011

У меня в файле businessAplicationContext.xml несколько бинов, все работало нормально, пока я не добавил новый с именем:

Этот TcmLogManager просто создает экземпляр java.util.logging.StreamHandler, чтобы некоторые записи журнала могли быть сохранены в памяти.

Проблема в том, что Spring создает экземпляр этого компонента 2 раза ... хотя есть только 1 определение (и если я дублирую строку в XML-файле с другим идентификатором, он создает 4 объекта ... и так далее ...)

Я также определил область действия как "singleton", но она не работает.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Проверьте файлы контекста на наличие <context:component-scan> или других тегов сканирования. Это заставляет Spring сканировать ваши исходные файлы на наличие классов компонентов. Если вам нужно более одного сканирования, вы должны обрезать сканирование с помощью фильтров исключения / включения. Вы определяете фильтры с вложенными узлами XML. Как указал @adarshr, второй вызов конструктора может быть прокси-компонентом, используемым для связи аспектов AOP.

0 голосов
/ 11 августа 2011

Наиболее вероятная причина того, как вы описываете проблему, заключается в том, что файл контекста, в котором находится это определение компонента, используется дважды при создании ApplicationContexts - возможно, дважды в одном и том же, как-то или для двух разных.Когда Spring запускается, он регистрирует на уровне INFO все bean-компоненты, которые существуют в конкретной BeanFactory.Вы можете проверить этот список, чтобы увидеть, где именно находятся бобы.Найдите фразу «определение бобов» в журналах, чтобы найти ее.

...