java - 在 Spring 中向单个服务注入(inject)多个实现

标签 java spring struts2

我有一个名为 DataSource 的服务接口(interface)和多个实现,例如 XMLDataSourceDataBaseDataSource 等。

我想根据某些用户交互(例如,如果用户单击 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/

相关文章:

java - 使用 Spring 的 RMI 很慢

java - 自定义Spring集成出站网关实现

java - Struts2 表单字段验证不起作用

eclipse - Tomcat加载Struts 2失败(异常启动过滤器struts2)

java - IBM MQ - 权限 - 阅读视角

java - Velocity 模板从 Velocity Context 中转义 XML

spring - 带有备用数据源的 Grails 'withTransaction'

java - Spring Data 中 MongoOperations 中的 findOne 方法的行为是什么?

Java:使用if条件检查char变量的内容

javascript - 使用 Struts2 标签分配隐藏值