我有一个名为 DataSource 的服务接口(interface)和多个实现,例如 XMLDataSource、DataBaseDataSource 等。
我想根据某些用户交互(例如,如果用户单击 XML,那么我需要使用 XML 实现)将(Spring)适当的实现注入(inject)到我的 Struts2 操作中。 Spring已经被用于DI框架。
@Autowired
private DataSource dataSource;
请提出实现此目标的最佳方法。
最佳答案
如果您需要在运行时根据用户交互选择实现,则必须 Autowiring DataSource
接口(interface)的所有可能实现。
当您 Autowiring 所需接口(interface)的 List
时,Spring 将使用每个实现的实例自动填充列表。
@Autowired
private List<DataSource> dataSources;
这取决于您,然后根据用户交互选择正确的界面。
如果需要根据bean名称进行区分,也可以选择 Autowiring 以bean名称为索引的DataSource对象的字典。
@Autowired
private Map<String, DataSource> dataSourceIndex;
这是从 2.5 版本的 Spring 开始提供的,您可以在这里找到 autowire documentation
关于java - 在 Spring 中向单个服务注入(inject)多个实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026785/