在运行时更新使用@Value注释的字段

时间:2013-05-10 09:05:39

标签: spring properties updates

让我们假设我们在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类实际上在第一时间处理注射?如果解决方案不存在,我可以重用我自己执行此操作的代码。

1 个答案:

答案 0 :(得分:4)

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

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

关键思想是使用后处理器构建包含属性字段的所有字段的列表。如果更改了属性,则可以使用此列表更新字段。