3

FactoryBean で生成された 2 つのリストがあり、この 2 つのマージされたバージョンで Bean を初期化したいと考えています。これを行う方法はありますか?

<bean id="listA" class="XFactoryBean" >
  ...
</bean>
<bean id="listB" class="YFactoryBean">
  ...
</bean>
<bean >
  <property name="AwithB" ...>
</bean>

静的リスト ( http://vikdor.blogspot.hu/2012/10/using-collection-merging-in-spring-to.html ) で機能するソリューションがありますが、生成されたリストでは機能しません。

4

3 に答える 3

3

Java @ConfigurationFTW:

@Configuration
public class Config {

    @Resource
    private List listA;

    @Resource
    private List listB;

    @Bean
    public List AwithB() {
        List mergedList = new ArrayList(listA);
        listB.addAll(listB);
        return mergedList;
    }

}

定型文がはるかに少ない。

于 2013-01-25T19:48:02.380 に答える
2

SpEL 関連のソリューション (Spring config でリストを拡張する方法) を確認し、ListFactoryBean を拡張した後 ( http://ericlefevre.net/wordpress/2008/04/02/merging-lists-in-a-spring-configuration- file/ ) 次の解決策を思いつきました。

構成:

<bean id="AwithB" class="com.util.ListMergerFactoryBean">
    <property name="listOfLists">
        <list>
            <ref bean="listA" />
            <ref bean="listB" />
        </list>
    </property>
</bean>

ジャバ:

public class ListMergerFactoryBean implements FactoryBean<List> {

private List<List> listOfLists;

@Override
public List getObject() throws Exception {
    List mergedList = new ArrayList();
    for (List list : listOfLists) {
            mergedList.addAll(list);
    }
    return mergedList;
}

@Override
public Class<?> getObjectType() {
    return (new ArrayList()).getClass();
}

@Override
public boolean isSingleton() {
    return false;
}

public void setListOfLists(List<List> listOfLists) {
    this.listOfLists = listOfLists;
}

}

更新: Aron Bartle のソリューションを使用してバグを解消しました。ありがとう!

于 2013-01-25T12:09:33.500 に答える