当前位置: 首页 > 知识库问答 >
问题:

使用yaml配置注入bean列表

阎功
2023-03-14
app:
    beans:
        - BeanA
        - BeanB

结果是-

Property: app.beans[0]
    Value: 
    Origin: class path resource [application-local.yaml]:86:6
    Reason: No converter found capable of converting from type [java.lang.String] to type [com.myprojects.BeanInterface]

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

共有1个答案

姜博
2023-03-14

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

将bean按给定名称从application.yaml注入到列表中的配置类:

@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
{
}
app:
  beans: FirstDynamic, SecondDynamic
 类似资料:
  • 或 因为bean注入将注入A的实现,在spring配置中是B。我不想指定泛型类型,因为这会稍微违背使用泛型的目的。

  • 引入 Maven 依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>${shardingsphere.version}</version> </dependency> <!-- 使用

  • 引入 Maven 依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>${shardingsphere.version}</version> </dependency> 规则配置 Sha

  • 我有一个Spring bean,在Spring Bean中我有一个对其他bean列表的依赖项。我的问题是:如何注入一个通用的bean列表作为该bean的依赖项? 例如,一些代码: 我的豆子: 问题是:;如何在Painter中获得颜色列表?另外,还有一点:我应该让@Configuration返回接口类型还是类? 谢谢你的帮助!

  • spring日志中的info消息显示: 示例: 下面有一个简单的示例,可以使用。这里,Bar是嵌套在Foo内部的,我需要模拟Bar进行测试: 现在对于测试来说,假设我想注入一个mockbar而不是真正的bar。我如何在下面的测试类中实现这一点? 实际测试用例:

  • 我已经看到了其他相关的问题:Spring Boot yaml字符串列表的配置 也有同样的问题。 我应用了解决方案,并四处工作,发现解决方案有点棘手。 有没有办法让列表使用@value? 如果不是现在,将来会有吗? 多谢.