Поскольку ни singleton
, ни prototype
области видимости вам не подходят (вам не нужен один объект, но вы не хотите каждый раз новый экземпляр), вам нужна другая область.
В контексте веб-приложения есть готовое решение - используйте request
scope - таким образом, в каждом цикле запроса / ответа у вас будет только один экземпляр вашего компонента, независимо от того, где и сколько раз вы вводите его.
В контексте не веб-приложения вы можете определить собственную реализацию org.springframework.beans.factory.config.Scope
Обновление: после того, как вы пояснили, это выглядит как очень странный случай.Мне приходит в голову следующее:
- определяют два
FactoryBean
с (на самом деле - подклассы AbstractFactoryBean
) - один каждый раз возвращает новый объект, а другой возвращает один и тот же объект (обаони должны находиться в области singleton
- вводить
Foo
с @Resource(name="prototypeFactoryBean")
и @Resource(name="singletonFactoryBean")
(вместо @Autowired
) singletonFactoryBean
может быть разработан дляпросто верните синглтон (внедренный в класс фабричного компонента) prototypeFactoryBean
может создать новый экземпляр, приведите BeanFactory
(доступно через getBeanFactory()
) к AutowireCapableBeanFactory
и вызовите .autowire(newlyCreatedBean)
,а затем верните его.(в качестве альтернативы вы можете ввести ApplicationContext
и получить AutowireCapableBeanFactory
)
Но это слишком сложно, и вам понадобятся расширенные знания о пружине даже после моего объяснения:)
Более тогоЯ думаю, вам следует пересмотреть свой дизайн, вместо того, чтобы делать вышеперечисленные «причуды»
Обновление 2: После вашего комментария концепция именования переносится в аннотации - как я указал выше, вы можете использовать @Resource(name="someBean")