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名称呢?
一种解决方案是在应用程序启动时向列表中注入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? 如果不是现在,将来会有吗? 多谢.