java - 基本的 spring 依赖注入(inject)问题,没有 setter 只有 getter

标签 java spring dependencies code-injection setter

我有一个场景,我需要将值注入(inject)到没有 setter 的类中的 Arraylist 我相信在这种情况下,我需要在 POC 类中获取列表,然后执行添加:

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 类 [outBoundocument.factory.POC] 的无效属性“beheaviour”:Bean 属性“beheaviour”不可写或具有无效的 setter 方法。 setter 的参数类型与 getter 的返回类型是否匹配?

我无法控制 POC 类,因为它是外部供应商提供的类,并且我无法对其进行构造函数注入(inject),因为向其添加值的唯一方法是通过以下方式:

POC poc=new POC();
poc.getBeheaviour().add("some Stuff")

最佳答案

您可以编写一个自定义 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>

关于java - 基本的 spring 依赖注入(inject)问题,没有 setter 只有 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101801/

相关文章:

java - 具有 2 个参数的静音命令 (ArrayIndexOutOfBoundsException)

Java - 是否可以逐行读取文件,停止,然后立即开始读取我停止的地方的字节?

spring - 在 Amazon Beanstalk 上处理 Spring Boot 集群 Websocket

gradle - 如何从 gradle 中的 jar 中排除特定类

wpf - 绑定(bind)到时间相关的属性

r - 如何在包中使依赖项成为可选的

java - 为什么 Java 必须抛出并发修改异常?

java - 从 Java 调用 Catalog 过程执行 SSIS 包

java - 如何刷新java中网络名称的解析?

java - jirutka/rsql-parser 和 QueryDSL