我想构建一个Spring应用程序,可以轻松添加新组件,而无需太多配置。例如:您有不同类型的文档。这些文档应该能够导出为不同的文件格式。
为了使这个功能易于维护,它应该(基本上)以下列方式工作:
我用以下方式描绘了它:
@Component
public class ExcelExporter implements Condition {
@PostConstruct
public void init() {
excelExporter();
}
@Bean
public Exporter excelExporter(){
Exporter exporter= new ExcelExporter();
return exporter;
}
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return true;
}
}
为了与这些出口商合作(展示它们等),我需要得到所有这些出口商。我试过这个:
Map<String, Exporter> exporter =BeanFactoryUtils.beansOfTypeIncludingAncestors(appContext, Exporter.class, true, true);
不幸的是,这不起作用(返回0个bean)。我对此很新,有人会介意我在Spring中如何正确完成这项工作吗?也许我的方法比我的方法有更好的解决方案吗?
答案 0 :(得分:4)
您可以毫不费力地在Map中获取给定类型bean的所有实例,因为它是内置的Spring功能。
只需自动装配您的地图,所有这些bean都会被注入,并使用bean的ID作为关键字。
@Autowired
Map<String,Exporter> exportersMap;
如果您需要更复杂的内容,例如特定的Map实现或自定义键。考虑定义自定义ExporterMap,如下所示
@Component
class ExporterMap implements Map{
@Autowired
private Set<Exporter> availableExporters;
//your stuff here, including init if required with @PostConstruct
}