我有一些接口,例如“ BeanInterface”和实现该接口的多个Spring Bean,例如BeanA,BeanB。在另一堂课中,我得到了这些bean的清单:about:config
。而我想做的只是注入yaml配置中指定的List<BeanInterface>
Bean。
要执行我在yaml中指定的操作,请输入要注入的bean名称列表。
List<BeanInterface>
结果是-
app:
beans:
- BeanA
- BeanB
属性BeanA,BeanB只是字符串值,那么如何指定Bean名称?
答案 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