我有一个扩展属性的类,用于存储一些专门的键名:
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的自动装配器,所以我真的没有看到这里的错误。
答案 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
的属性,根据您的代码看起来不像