使用yaml配置注入bean列表

时间:2019-09-09 07:46:34

标签: spring yaml

我有一些接口,例如“ BeanInterface”和实现该接口的多个Spring Bean,例如BeanA,BeanB。在另一堂课中,我得到了这些bean的清单:about:config。而我想做的只是注入yaml配置中指定的List<BeanInterface> Bean。

要执行我在yaml中指定的操作,请输入要注入的bean名称列表。

List<BeanInterface>

结果是-

app:
    beans:
        - BeanA
        - BeanB

属性BeanA,BeanB只是字符串值,那么如何指定Bean名称?

1 个答案:

答案 0 :(得分:1)

一种解决方案是在应用程序启动时将bean注入列表中,然后检索该bean供以后使用。给我展示一个使用BeanFactory来获取bean并将其添加到列表的示例:

配置类,该类通过application.yaml中的给定名称将bean注入列表:

@Configuration
public class DynamicBeanInjection
{
    @Value( "${app.beans}" )
    private String[] beans;

    @Autowired
    private BeanFactory beanFactory;

    @Bean
    List<DynamicInterface> getDynamicBeans( )
    {
        final List<DynamicInterface> dynamicInterfaces = new ArrayList<>( );
        for ( String bean : beans )
        {
            dynamicInterfaces.add( beanFactory.getBean( bean, DynamicInterface.class ) );
        }
        return dynamicInterfaces;
    }
}

创建一个DynamicInterface及其3种实现:

public interface DynamicInterface
{
}

@Component("FirstDynamic")
public class FirstDynamic implements DynamicInterface
{
}

@Component("SecondDynamic")
public class SecondDynamic implements DynamicInterface
{
}

@Component("ThirdDynamic")
public class ThirdDynamic implements DynamicInterface
{
}

application.yaml

app:
  beans: FirstDynamic, SecondDynamic

这是示例的输出示例:

  

注入的豆大小:2