在运行时更新带有@Value注释的字段



假设我们在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不支持这一点,因为正常的注入是在创建bean时完成的,而不是将它投入使用。

无论如何:在这篇博客文章"Spring 3.1, Java 7和Google Guava的可重载应用程序属性"中,你可以找到一个解决方案的想法。

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

相关内容

  • 没有找到相关文章

最新更新