2011-12-30 4 views
3

Допустит, у меня есть такая ситуация:Возможность создания шаблона боба весной

<bean id="sample" class="ComlicatedClass" scope="prototype"> 
    <property name="someProperty" value="${propertyValue}"/> 
</bean> 

Я хочу, чтобы иметь возможность создать компонент программен и обеспечить ценность для propertyValue во время выполнения (псевдокод вперед):

appContext.getBean("sample", "propertyValue" => "value") 

В некотором смысле, я хочу создать «bean template», а не полный определенный bean-компонент. Возможно ли это каким-либо образом весной?

EDIT: Значение для propertyValue известно во время выполнения! Невозможно определить его как другой компонент.

ответ

0

почему вы не просто делать

Sample sample = appContext.getBean("sample"); 
sample.setSomeProperty(appContext.getBean("someOtherBean")); 
+0

См. Мое редактирование выше. –

+0

все еще вы можете сделать это 'sample.setSomeProperty (appContext.getBean (someOtherBeanId));' –

+0

Это будет работать, но помните, что Spring использует область Singleton по умолчанию, то есть все компоненты только создаются экземпляром один раз. Следовательно, при вызове 'setSomeProperty()' вы измените свойство всех ссылок на компонент 'Sample'. – matsev

0

Вы смотрели на Prototype scope?

Неэлементный, прототип области развертывания компонента приводит к созданию нового экземпляра bean-компонента каждый раз, когда выполняется запрос для этого конкретного компонента. То есть, компонент вставляется в другой компонент или вы запрашиваете его через вызов метода getBean() в контейнере. Как правило, используйте область прототипа для всех бэндов состояния и одноэлементную область для фагов без гражданства.

Существует также @Scope аннотаций, если вы используете Java based container configuration.

+0

Я понимаю область прототипа. Проблема в том, что я не хочу создавать «точно» один и тот же новый экземпляр, я хочу иметь возможность передавать параметр при создании нового экземпляра. –

+0

Ну, это прототип его части. Вы можете создать прототип bean с общими частями, затем вы вызываете метод setter с определенным значением параметра. – matsev

+0

Ну, для этого небольшого примера вы правы. Проблема в сценарии реальной жизни У меня есть 7 бобов, от которых зависит этот компонент 'sample', и я хочу, чтобы все они использовали этот параметр. Я хочу избежать создания всех этих компонентов в коде. –

Смежные вопросы