特殊なキー名を格納するために使用されるプロパティを拡張するクラスがあります。
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 の自動配線されたセッターがあるため、ここで何が問題なのかわかりません。