3

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

@Component
public class MyComponent {

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

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

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

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

但是,假设我有一项服务可以让用户更改someProperty的值:

public void changeProp(String name, String newValue);

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

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

4

1 回答 1

4

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

无论如何:在这篇博文“Reloadable Application Properties with Spring 3.1, Java 7 and Google Guava”中,您可以找到解决方案的想法。

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

于 2013-05-10T09:47:06.573 回答