如何在Spring中更新@Autowired String bean的值?

Pat*_*Pat 10 java spring autowired

我有一个String,我将自动装配为bean.该值的值String通过属性文件设置,并在运行时加载.我可以验证这一点.这是我的XML:

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

<bean id="loadedProp" class="java.lang.String">
   <constructor-arg>
      <value>${loaded-prop}</value>
   </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我在bean中自动装配:

@Component
public class Foo {

  @Autowired
  private String loadedProp;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好看.我有多个组件在这个bean中自动装配.我正在尝试做的是,在应用程序运行时,将bean的值更新为其他内容,以便在bean自动装配的任何地方,它使用最新的值.是否可以这样做,或者我只是需要在每次想要更改值时重新启动?

Pat*_*Pat 5

在阅读了其他一些答案和评论后,我找到了解决方案。我最终创建了一个简单的类:

public class LPropBean {

   private String loadedProp;

   public LPropBean(String loadedProp) {
       this.loadedProp = loadedProp;
   }

   // getters and setters...
}
Run Code Online (Sandbox Code Playgroud)

我更新了我的 XML 文件:

<bean id="lPropBean" class="LPropBean">
  <constructor-arg>
    <value>${loaded-prop}</value>
  </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

并更新@Component了 bean 中自动装配的所有s:

@Autowire
private LPropBean lPropBean;

// ... later ...
lPropBean.setLoadedProp(newProp);

// ... later ...
lPropBean.getLoadedProp();
Run Code Online (Sandbox Code Playgroud)

我确信有一种更优雅的方式,但这正是我需要的方式。