如何使用工厂方法返回创建类型为string bean的arraylist

时间:2018-01-30 18:15:57

标签: java spring arraylist

我在一个返回ArrayList的类中有一个方法,我想使用这个返回来创建一个像这样的bean:

<bean id="myList" factory-bean="myClass" factory-method="getMyList" class="java.util.ArrayList">
    <constructor-arg index="0" type="java.lang.String">
        <util:constant static-field="com.myapp.searchapp.MY_VALUE"/>
    </constructor-arg>
</bean>

但是当我尝试从另一个bean引用这个bean时,IntelliJ抱怨说:

Bean must be one of these types: java.lang.String or java.util.ArrayList<java.lang.String> less... (Ctrl+F1) 
Checks value types for Spring injections (properties & constructor arguments)

我到底错在了什么?

1 个答案:

答案 0 :(得分:0)

..如评论中所述,您必须确保“factory-method”不带参数:

package foo.bar;
...
public class MyClass {
  ...
  public List<String> getMyList() {
    //maybe rather a copy than the original ;)
    return daList;
  }
...

例如1-String构造函数:

...
  public MyClass(String one) {
    daList = new ArrayList<>();
    daList.add(one); 
  }
...
}

...和一个常量字符串com.myapp.searchapp.MY_VALUE 你可以把它连接起来:

<bean id="myClass" class="foo.bar.MyClass">
  <constructor-arg index="0" type="java.lang.String">
      <util:constant static-field="com.myapp.searchapp.MY_VALUE" />
  </constructor-arg>
</bean>

<!-- and... -->
<bean id="myList" factory-bean="myClass" factory-method="getMyList" />

Here - “弹簧工厂方法”中的热门googl命中

... here - 一个受欢迎的,相关的&amp;也许有用的问题。