Внедрение зависимости весной.не удобно в отношении объема прототипа - PullRequest
0 голосов
/ 13 марта 2012

DI Spring отлично работает для одноэлементного компонента. Однако, что касается области применения прототипа, не очень удобно, если бин-прототип сам вводит другие компоненты. Дело в том, что для прототипа bean-компонента я хотел бы создать его, используя новое ключевое слово Java с аргументами конструктора времени выполнения, которое сложно описать статически в конфигурации XML-компонента. Использование ключевого слова new делает прототип bean-компонентов из контейнера Spring, в них, конечно, невозможно использовать Spring DI.

Мне интересно, как люди решают подобные проблемы? Конечно, я могу использовать AspectJ, чтобы сделать себе инъекцию в качестве компенсации. Но наличие двух механизмов впрыска для меня не изящное решение.

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Вы должны иметь возможность создавать объекты-прототипы через context.getBean(name) или context.getBean(class), где контекст - это ApplicationContext экземпляр.

Другой, возможно, даже более удобный способ - использовать фабричный шаблон с фабричным объектом, представляющим собой одноэлементный объект со всеми связанными зависимостями, и передавать их построенным объектам в factory.createInstance(...).

0 голосов
/ 13 марта 2012

Spring позволяет передавать значения конструктора в метод getBean(), посмотрите этот SO-Post:

бин пружины со значением динамического конструктора

Кроме того, чтобыло бы неправильно извлекать bean-компонент из контекста, который только частично инициализирован, и вы сами устанавливаете параметры времени выполнения с помощью установщиков?

Имейте в виду, что Spring-Beans по умолчанию являются Singletons, так что в вашем Spring-Конфигурируйте, вы должны были бы явно указать их как область действия прототипа!

0 голосов
/ 13 марта 2012

Отметьте свой прототип с помощью @ Configurable

...