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

lg40wkob  于 2023-03-11  发布在  Spring
关注(0)|答案(2)|浏览(140)

我正在将旧的Spring项目迁移到SpringBoot。旧项目具有基于XML的配置。
我在旧配置中有一个bean声明列表,如下所示:

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

}

计划是编译所有bean的列表,并在需要时将其用作@Resource
那么,构建bean列表的最佳技术是什么?我应该使用BeanFactory来检索bean并将它们添加到列表中,而不是单独调用每个bean函数吗?

czq61nw1

czq61nw11#

声明多个相同类型的bean之后,您可以只使用@Autowired List<MyBean> myBeans;@Autowired Map<String, MyBean> myBeans;,其中map key是bean名称。
@Autowired在这里只是作为一个例子,任何Spring注入类型都可以工作。

eh57zj3b

eh57zj3b2#

正如前面的答案所述,您可以简单地注入具有相同类型的bean集合。
有关此方法的详细信息,请参阅in this article

相关问题