我能在运行时替换Spring bean定义吗?

12 浏览
0 Comments

我能在运行时替换Spring bean定义吗?

考虑以下情景。我有一个Spring应用程序上下文,其中包含一个应该可配置的bean,比如DataSourceMailSender。可变的应用程序配置由一个单独的bean管理,我们称之为configuration

现在,管理员可以更改配置值,如电子邮件地址或数据库URL,并且我希望在运行时重新初始化配置的bean。

假设我不能简单地修改上述可配置bean的属性(例如由FactoryBean或构造函数注入创建),而是必须重新创建bean本身。

有关如何实现此目标的任何想法吗?我很乐意接受有关如何组织整个配置的建议。一切都没有固定。 🙂

编辑

为了澄清一些事情:我不是在问如何更新配置或如何注入静态配置值。我将尝试一个例子:


    
        
    
    
        
    
    
        
    

所以有一个使用构造函数注入的bean constructorInjectedBean。想象一下,构建该bean非常昂贵,因此使用原型作用域或工厂代理不是一个选项,可以考虑DataSource

我想要做的是,每次更新配置(通过configurationService)时,都会重新创建和重新注入constructorInjectedBean到应用程序上下文和相关的bean中。

可以安全地假设constructorInjectedBean正在使用一个接口,因此代理魔法确实是一个选项。

希望能使问题更清晰一些。

0