【问题标题】:how to inject an int array in spring bean如何在spring bean中注入一个int数组
【发布时间】:2012-01-20 06:50:32
【问题描述】:

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

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

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

怎么做?

感谢阅读!

【问题讨论】:

    标签: spring


    【解决方案1】:

    用逗号分隔值应该这样做

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

    Class MyCLass
    {
        private Integer[] myIntArray;
    
        public Integer[] getMyIntArray(){
            return this.myIntArray;
        }
        public void setMyIntArray(Integer[] intArray){
            this.myIntArray=intArray;
        }
    }
    

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

    <bean id="myBean" class="MyClass">
        <property name="myIntArray" value="1,2,3,4,5"></property>
    </bean>
    

    如果您想使用属性文件:

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

    在你的 myProps.properties 文件中

    myvalues=1,2,3,4,5
    

    【讨论】:

    • 天啊,你等了 20 分钟;要有耐心。
    • @Rifat:您能否也用课程代码更新您的答案(基本上是设置器)...这将使答案完整..我无法编辑您的答案!
    • @Rifat:这不起作用...我收到以下错误:原因:org.springframework.beans.TypeMismatchException:无法转换“java.lang.String”类型的属性值属性“myCodes”所需的类型“java.lang.Integer[]”;嵌套异常是 java.lang.NumberFormatException: For input string: "1000,2000,3000,4000,5000"
    • 如果你添加一个&lt;bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"&gt; 这应该从 Spring 3.0 开始工作
    【解决方案2】:

    有这样的说法:

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

    但是由于您需要从属性文件中读取这些值,所以我找不到从属性文件中读取的方法:-(

    但我有一个丑陋的解决方法。将您的课程更改为以下内容:

        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);
           }
       }
    

    在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>
    

    希望这会有所帮助。

    【讨论】:

    • 我自己跟着丑陋的路走!无论如何,谢谢!
    • 无需解析@Moinul Hossain 的答案是更简洁的方式。
    【解决方案3】:

    在你的 spring.xml 中你可以有这样的东西。

    <bean id="mybean" class="package.name">
            <property name="myIntArray">
                <list value-type="int">
                    <value>1</value>
                    <value>2</value>
                    <value>3</value>
                </list>
            </property>
        </bean>
    

    希望这对您和其他人也有帮助。 这是你不想使用属性文件的时候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2012-11-11
      相关资源
      最近更新 更多