让我们假设我们在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类实际上在第一时间处理注射?如果解决方案不存在,我可以重用我自己执行此操作的代码。
答案 0 :(得分:4)
我希望spring没有这方面的支持,因为正常注入是在创建bean时完成的,但是它不会投入使用。
无论如何:在this blog entry "Reloadable Application Properties with Spring 3.1, Java 7 and Google Guava"中,您可以找到解决方案的想法。
关键思想是使用后处理器构建包含属性字段的所有字段的列表。如果更改了属性,则可以使用此列表更新字段。