基本弹簧依赖注入的问题,其中没有setter只是一个getter

时间:2011-05-23 19:15:14

标签: java spring dependencies code-injection setter

我有一个场景,我需要在没有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")

2 个答案:

答案 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