如何在spring bean中注入一个int数组

Vic*_*cky 14 spring

我有一个整数列表,如1,2,3,4,5,6,7,8,9,10

我想在我的POJO中将它用作整数数组.

但是,我不希望它在我的类中,但希望将其外部化到属性文件中,然后将其作为类的属性注入我的xml中.

怎么做 ?

谢谢阅读!

Moi*_*ain 12

用逗号分隔值应该这样做

如果你的班级看起来像这样

Class MyCLass
{
    private Integer[] myIntArray;

    public Integer[] getMyIntArray(){
        return this.myIntArray;
    }
    public void setMyIntArray(Integer[] intArray){
        this.myIntArray=intArray;
    }
}
Run Code Online (Sandbox Code Playgroud)

你的上下文文件应该是这样的:

<bean id="myBean" class="MyClass">
    <property name="myIntArray" value="1,2,3,4,5"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

如果要使用属性文件:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:myProps.properties"/>
</bean>
<bean id="myBean" class="MyClass">
    <property name="myIntArray" value="${myvalues}"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

在你的myProps.properties文件中

myvalues=1,2,3,4,5
Run Code Online (Sandbox Code Playgroud)

  • @Rifat:这不起作用......我收到以下错误:引起:org.springframework.beans.TypeMismatchException:无法将类型'java.lang.String'的属性值转换为必需类型'java.lang.属性'myCodes'的整数[]'; 嵌套异常是java.lang.NumberFormatException:对于输入字符串:"1000,2000,3000,4000,5000" (3认同)
  • 如果添加`&lt;bean id =“ conversionService” class =“ org.springframework.context.support.ConversionServiceFactoryBean”&gt;`,则应在Spring 3.0以后开始 (2认同)

Moi*_*ain 6

有一种方法可以这样:

<beans:bean id="myBean" class="MyClass">
  <beans:property name="myIntArray" >
    <beans:list>
      <beans:value>1</beans:value>
      <beans:value>2</beans:value>
      <beans:value>3</beans:value>
   </beans:list>
  </beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)

但是,当你需要从属性文件中读取这些值时,我找不到从属性文件中读取的方法:-(

但我有一个丑陋的解决方案.将您的班级更改为以下内容:

    Class MyCLass
    {
        private Integer[] myIntArray;
        private String[] myIntArrayStr;

        public Integer[] getMyIntArray(){
            return this.myIntArray;
        }
        public void setMyIntArray(Integer[] intArray){
            this.myIntArray=intArray;
        }
        public void setMyIntArrayStr(String[] myIntArrayStr) {
           this.myIntArrayStr = myIntArrayStr;
           //we are going to read the values as a string array and set out integer array inside this setter
           int i=0;
           Integer[] myInts = new Integer[myIntArrayStr.length];
           for(String s: myIntArrayStr){
               myInts[i]=Integer.parseInt(s);
               i++;
           }
           setMyIntArray(ints);
       }
   }
Run Code Online (Sandbox Code Playgroud)

在xml中写入如下:

<beans:bean id="myBean" class="MyClass">
      <beans:property name="myIntArrayStr">
       <beans:value>
        ${myvalues} <!-- this is gonna come from properties file as previously was -->
       </beans:value>
      </beans:property>

    </beans:bean>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.