我有一个场景,我需要在没有setter的类中向Arraylist注入值我相信在这个场景中我需要在POC类中列出get然后执行add:< / p>
public class POC {
private ArrayList<String> beheaviour=new ArrayList<String>();
public ArrayList<String> getBeheaviour() {
return beheaviour;
}
}
这是xml映射代码:
<bean id="poc" class="outBoundocument.factory.POC">
<property name="beheaviour">
<list>
<value>temp1</value>
<value>temp2</value>
<value>temp3</value>
<value>temp4</value>
<value>temp5</value>
</list>
</property>
</bean>
以下代码返回:
设置属性值时出错;嵌套异常是org.springframework.beans.NotWritablePropertyException:bean类的无效属性'beheaviour'[outBoundocument.factory.POC]:Bean属性'beheaviour'不可写或具有无效的setter方法。 setter的参数类型是否与getter的返回类型匹配?
我无法控制POC类,因为它是一个外部供应商提供的类,我不能对它进行构造函数注入,因为添加值的唯一方法是通过以下方式:
POC poc=new POC();
poc.getBeheaviour().add("some Stuff")
答案 0 :(得分:3)
您可以编写一个自定义FactoryBean来添加项目。 Java中有类似的东西:
public class POCFactoryBean implements FactoryBean<POC> {
private POC poc = new POC();
public void setBeheavior(List<String> items) {
poc.getBehavior().addAll(items);
}
public POC getObject() {
return poc;
}
public Class<?> getObjectType() {
POC.class;
}
public boolean isSingleton() {
return true;
}
}
对应的XML:
<bean id="poc" class="some.package.POCFactoryBean">
<property name="beheaviour">
<list>
<value>temp1</value>
<value>temp2</value>
<value>temp3</value>
<value>temp4</value>
<value>temp5</value>
</list>
</property>
</bean>
答案 1 :(得分:1)
据我所知,Spring将无法在这里为您提供帮助(如果您无法访问代码)。 Spring只允许您使用闭源类作为bean,如果您在XML中定义它,这反过来又无法进行属性注入。
如果您不依赖于Spring,则可以使用Java Reflection完成所需的操作。
的更新强> 的
道歉,似乎你可以通过XML自动装配。看看here。