1

特殊なキー名を格納するために使用されるプロパティを拡張するクラスがあります。

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.
    }
}

次のように Storage と StorageConfiguration を初期化するように Spring を設定しました。

<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: クラスパス リソース [applicationContext.xml] で定義された名前 'storage' を持つ Bean の作成中にエラーが発生しました: Bean プロパティ 'authorizationConfig' の設定中に Bean 'storageConfiguration' への参照を解決できません。ネストされた例外は org.springframework.beans.factory.BeanCreationException です: クラスパス リソース [applicationContext.xml] で定義された名前 'authorizationConfig' の Bean を作成中にエラーが発生しました: プロパティ値の設定中にエラーが発生しました。ネストされた例外は org.springframework.beans.NotWritablePropertyException: Invalid property 'storageConfiguration' of bean class [org.springframework.beans.factory.config.PropertiesFactoryBean]: Bean プロパティ 'storageConfiguration' は書き込み可能ではないか、無効なセッター メソッドがあります。

ご覧のとおり、Storage クラスに storageConfiguration の自動配線されたセッターがあるため、ここで何が問題なのかわかりません。

4

2 に答える 2

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>
于 2013-05-28T12:57:54.290 に答える
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、これはコードのようには見えません

于 2013-05-28T12:56:57.453 に答える