2013-05-10 56 views
3

让我们想象一下,我们在春天这样的组件:更新场运行与@Value注释

@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对此没有支持?我可以解雇一些事件吗?

我基本上可以自己做这个,但我徘徊它可能已经在那里?如果没有人知道什么春季班实际上是在第一时间处理注射?如果解决方案不存在,我可以重复使用自己的代码。

+0

[我可以在运行时替换Spring bean定义吗?](http://stackoverflow.com/questions/4041300/can-i-replace-a-spring-bean-definition-at-runtime) – Ralph 2013-05-10 09:36:46

回答

2

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

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

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

+0

如果我需要自己实施它,那么我的想法就是这样。 – 2013-05-10 10:05:20