Рассмотрим следующий сценарий. У меня есть контекст приложения Spring с bean, свойства которого должны быть настраиваемыми, подумайте DataSource
или MailSender
. Конфигурирование изменчивого приложения управляется отдельным bean, назовите его configuration
.
Теперь администратор может изменить значения конфигурации, такие как адрес электронной почты или URL-адрес базы данных, и я хотел бы повторно инициализировать настроенный bean во время выполнения.
Предположим, что я просто не могу просто изменить свойство сконфигурируемого bean выше (например, созданное с помощью FactoryBean
или инсталляции конструктора), но нужно воссоздать сам bean.
Любые мысли о том, как достичь этого? Я был бы рад получить советы о том, как организовать всю конфигурацию. Ничего не исправлено.: -)
ИЗМЕНИТЬ
Чтобы немного прояснить ситуацию: я не спрашиваю, как обновлять конфигурацию или как вводить значения статической конфигурации. Я попробую пример:
<beans>
<util:map id="configuration">
<!-- initial configuration -->
</util:map>
<bean id="constructorInjectedBean" class="Foo">
<constructor-arg value="#{configuration['foobar']}" />
</bean>
<bean id="configurationService" class="ConfigurationService">
<property name="configuration" ref="configuration" />
</bean>
</beans>
Итак, существует bean constructorInjectedBean
, который использует инъекцию конструктора. Представьте, что конструкция bean очень дорога, поэтому использование области прототипа или прокси-сервера factory не является вариантом, подумайте DataSource
.
Я хочу, чтобы каждый раз, когда конфигурация обновляется (через configurationService
, bean constructorInjectedBean
воссоздается и повторно вводится в контекст приложения и зависит от beans.
Мы можем с уверенностью предположить, что constructorInjectedBean
использует интерфейс, поэтому магия прокси-сервера действительно является опцией.
Я надеюсь, что вопрос стал немного понятнее.