使用Spring初始化Properties对象

时间:2013-05-28 12:51:30

标签: java spring properties

我有一个扩展属性的类,用于存储一些专门的键名:

public class StorageConfiguration extends Properties {
    private final String PROPERTY_NAME_1 = "property.key";

    public String getProperty1() {
        return this.getProperty(PROPERTY_NAME_1);
    }

    public void setProperty1(String property1) {
        this.setProperty(PROPERTY_NAME_1, property1);
    }
}

使用这些属性的类:

public class Storage {
    StorageConfiguration storageConfiguration;

    @Autowired
    public void setStorageConfiguration(StorageConfiguration storageConfiguration) {
        this.storageConfiguration = storageConfiguration;
    }

    public void init() {
        // Initialize properties in this class using StorageConfiguration.
    }
}

我将Spring设置为初始化Storage和StorageConfiguration,如下所示:

<bean id="storage" class="com.k4rthik.labs.Storage" init-method="init">
    <property name="storageConfiguration" ref="storageConfiguration" />
</bean>
<bean id="storageConfiguration"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="storageConfiguration">
        <props>
            <prop key="property.key">property_value</prop>
        </props>
    </property>
</bean>

我期望会发生的事情是Spring会通过将属性“property.key”设置为“property_value”来初始化StorageConfiguration对象。

但是我得到以下异常

  

org.springframework.beans.factory.BeanCreationException:错误   在类路径资源中定义名为'storage'的bean   [applicationContext.xml]:无法解析对bean的引用   设置bean属性时'storageConfiguration'   'authorizationConfig';嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   在类路径中定义名为'authorizationConfig'的bean   resource [applicationContext.xml]:设置属性值时出错;   嵌套异常是   org.springframework.beans.NotWritablePropertyException:无效   bean类的属性'storageConfiguration'   [org.springframework.beans.factory.config.PropertiesFactoryBean]:Bean   属性'storageConfiguration'不可写或无效   二传法。 setter的参数类型是否与返回匹配   吸气剂的类型?

正如您所看到的,我在Storage类中有一个用于storageConfiguration的自动装配器,所以我真的没有看到这里的错误。

2 个答案:

答案 0 :(得分:4)

PropertiesFactoryBean创建一个Properties类型的bean。

要创建StorageConfiguration,您可以创建一个Copy构造函数

public class StorageConfiguration
{
    public StorageConfiguration(Properties defaults) {
        super(defaults);
    }
}

然后这应该有效:

<bean id="storageConfiguration" class="..StorageConfiguration">
  <constructor-arg>

   <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <prop key="property.key">property_value</prop>
        </props>
    </property>
  <bean>
  </constructor-arg>
</bean>

甚至:

<bean id="storageConfiguration" class="..StorageConfiguration">
  <constructor-arg>   
        <props>
            <prop key="property.key">property_value</prop>
        </props>
  </constructor-arg>
</bean>

答案 1 :(得分:3)

应该是

<bean id="storage" class="com.k4rthik.labs.Storage" init-method="init">
    <property name="storageConfiguration">
         <props>
            <prop key="property.key">property_value</prop>
        </props>
    </property>
</bean>

配置

<bean id="storageConfiguration"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="storageConfiguration">
        <props>
            <prop key="property.key">property_value</prop>
        </props>
    </property>
</bean>

表示StorageConfiguration类型的org.springframework.beans.factory.config.PropertiesFactoryBean有一个名为storageConfiguration的属性,根据您的代码看起来不像