【问题标题】:Update field annotated with @Value in runtime在运行时更新带有 @Value 注释的字段
【发布时间】:2013-05-04 22:14:31
【问题描述】:

假设我们在 Spring 中有这样一个组件:

@Component
public class MyComponent {

    @Value("${someProperty}")
    private String text;
}

如果我们定义属性占位符:

<context:property-placeholder location="classpath:myProps.properties"/>  

myPropos.properties 包含 someProperty 的值,该值将在上下文初始化时注入到 text 字段中。这非常简单易行。

但是假设我有一个服务可以让用户改变 someProperty 的值:

public void changeProp(String name, String newValue);

有没有机会我可以将 newValue 重新注入到文本字段中。我的意思是它应该很简单。基本上它与初始化后注入没有什么不同。我无法想象Spring不支持这个?我可以触发一些事件吗?

我基本上可以自己做这件事,但我想知道它可能已经存在了吗?如果没有,有谁知道 Spring 类实际上是在首先处理注射吗?如果解决方案不存在,我可能会重用那里的代码,我自己会执行此操作。

【问题讨论】:

标签: spring properties updates


【解决方案1】:

我希望spring对此没有支持,因为正常注入是在创建bean时完成的,但不会投入使用。

无论如何:在this blog entry "Reloadable Application Properties with Spring 3.1, Java 7 and Google Guava",您可以找到解决方案的想法。

关键思想是使用后处理器来构建具有属性字段的所有字段的列表。如果属性发生变化,可以使用这个列表来更新字段。

【讨论】:

  • 是的,如果我需要自己实现它,我会想到类似的东西。
猜你喜欢
  • 1970-01-01
  • 2016-07-19
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多