在Spring中为属性注入动态值

时间:2011-12-13 16:06:57

标签: spring code-injection

我是Spring的新手,在通过各种来源(Book& Internet)浏览DI主题时,我看到了以下定义bean配置的模式:

例如,我们有一个" SampleApp"

public class SampleApp
{
    private int intValue;
    private float floatValue;

    public SampleApp(int value)
    {
      intValue = value;
    }

    public void setIntValue(int value)
    {
      intValue = value;
    }

    public void setFloatValue(float floatValue)
    {
      this.floatValue = floatValue;
    }
}

对应的bean配置如下:

 <bean class="somepackage.SampleApp" id="samplebeanapp">
    <constructor-arg value="15" />
    <property value="0.5" name="floatValue"></property>
 </bean>

我们一直在将这里的值硬编码为15&amp; 0.5。 以下是我的问题:

  • 是否可以将这些值作为运行时参数传递,并将范围作为原型?
  • 如果是,我们该怎么做?请详细说明一下。

1 个答案:

答案 0 :(得分:3)

Spring配置文件在启动时处理,Spring单例bean也在那时被实例化。在正常情况下,它们在应用程序生命周期内不会再次处理。

您可以使用此类属性注入来传递配置值,同时可以使用对象引用的注入来确定应用程序的结构。

要避免对XML文件中的值进行硬编码,可以使用PropertyPlaceholderConfigurer在属性文件中提取它们。

原则是尽可能地对接口进行编程,因此您不必将自己绑定到任何特定的实现。但是,对于您正在考虑的情况,您只需在运行时传递值。

示例:BeanA需要DaoBean的服务,但DaoBean不会被BeanA实例化。它将通过依赖注入传递给BeanA,而BeanA只会与DaoInterface进行通信。

此时如果BeanA想要保存15和0.5,将使用实际值(或更常见的变量)调用方法。

daoInterface.saveInt(15);
daoInterface.saveFloat(0.5);

在这种情况下,我没有使用依赖注入来传递值。依赖注入是一个很好的工具,但并不意味着必须在任何地方使用它。