I have a String that I\'m autowiring as a bean. The value for the String
is set via a properties file, and is loaded at runtime. That much I can verify. Here\'s
Since String
is immutable, you cannot just change its underlying value and have everyone that has a reference to it be updated.
You can change the reference of the String
that an instance of Foo
is holding onto to point to a different String
, but it will only be realized by objects that are working with the specific Foo
you updated. If Foo
is a Spring singleton, this shouldn't be an issue though...
Every time you want to change your spring injected values through changing the configuration, you are going to have to restart your container, which usually involves restarting your server.
After reading a few of the other answers and comments, I was able to figure out a solution. I ended up creating a simple class:
public class LPropBean {
private String loadedProp;
public LPropBean(String loadedProp) {
this.loadedProp = loadedProp;
}
// getters and setters...
}
I updated my XML file:
<bean id="lPropBean" class="LPropBean">
<constructor-arg>
<value>${loaded-prop}</value>
</constructor-arg>
</bean>
And updated all of the @Component
s that autowire in the bean:
@Autowire
private LPropBean lPropBean;
// ... later ...
lPropBean.setLoadedProp(newProp);
// ... later ...
lPropBean.getLoadedProp();
I'm sure there is a more elegant way, but this worked exactly how I needed it to.