我可以在运行时替换 Spring Bean 定义吗?
请考虑以下方案。我有一个Spring应用程序上下文,其bean的属性应该是可配置的,think或。可变应用程序配置由单独的Bean管理,我们称之为。DataSource
MailSender
configuration
管理员现在可以更改配置值,如电子邮件地址或数据库 URL,并且我想在运行时重新初始化配置的 Bean。
假设我不能简单地修改上面可配置bean的属性(例如,由或构造函数注入创建),而必须重新创建Bean本身。FactoryBean
关于如何实现这一目标的任何想法?我也很乐意收到有关如何组织整个配置的建议。没有什么是固定的。:-)
编辑
为了澄清一些事情:我不是在问如何更新配置或如何注入静态配置值。我试试一个例子:
<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
DataSource
我想做的是,每次更新配置时(通过重新创建bean并将其重新注入应用程序上下文和依赖Bean。configurationService
constructorInjectedBean
我们可以安全地假设使用接口,因此代理魔术确实是一种选择。constructorInjectedBean
我希望能把这个问题说得更清楚一点。