如何在 Spring 中从现有 bean 创建 bean 列表

问题描述 投票:0回答:2

我正在将一个旧的

Spring
项目迁移到
SpringBoot
。旧项目具有基于
XML
的配置。

我在旧配置中有一个 beans 声明列表,如下所示:

<bean id="basic" class="com.xyz.Parameter" abstract=true>
</bean>

<!-- List -->
<util:list id="searches">
    <bean parent="basic" id="roles">
        <property name="name" value="abc">
        ...
        ...
     </bean>
    <bean parent="basic" id="simple">
        <property name="name" value="abc">
        ...
        ...
     </bean>
    <bean parent="basic" id="user">
        <property name="name" value="abc">
        ...
        ...
     </bean>
</util:list>

现在,在 Java 配置文件中,我正在做如下操作:

@Configuration
class WebConfig{
    
    @Bean ("Basic")
    public Parameter basic(){
        return Parameter.builder ()
            .format (Pattern.compile("^ [A-Za-20-9]")
            .maxLength (100) build();
    }

    @Bean
    public Parameter simple (@Qualifier ("Basic") Parameter basic){
        return basic.toBuilder ()
            .field ("attribute")
            .Label ("Attribute Nane").build();
    }

    @Bean
    public Parameter user(@Qualifier ("Basic") Parameter basic){
        Parameter product = basic. toBuilder ()
            .field ("product")
            .label ("Product").build();
    }

    
    //TODO: List implementation
    @Bean("searches")
    public List< Parameter> getSearch(){
        
        return List.of(user()); //It requires params
    }

}

计划是编制一份所有豆子的清单,并在需要时将其用作

@Resource

那么,构建 beans 列表的最佳技术是什么?我应该使用

BeanFactory
检索 bean 并将它们添加到列表中,而不是单独调用每个 bean 函数吗?

spring spring-boot spring-mvc web-config freemarker
2个回答
1
投票

声明多个相同类型的bean后,您可以只使用

@Autowired List<MyBean> myBeans;
@Autowired Map<String, MyBean> myBeans;
,其中映射键是一个bean名称。

@Autowired
只是这里的一个例子,任何 Spring 注入类型都可以。


0
投票

如前一个答案所述,您可以简单地注入一组具有相同类型的 bean。

有关此方法的更多信息,您可以在本文中找到

© www.soinside.com 2019 - 2024. All rights reserved.