在Spring中向单个服务注入多个实现

Tap*_*ena 1 java spring struts2

我有一个名为DataSource的servive接口和多个实现,如XMLDataSource,DataBaseDataSource等.

我想基于一些用户交互向我的Struts2 Action注入(Spring)适当的实现,比如用户点击XML然后我需要使用XML实现.Spring已被用于DI框架.

@Autowired
private DataSource dataSource;
Run Code Online (Sandbox Code Playgroud)

请建议实现这一目标的最佳方法.

MPa*_*esi 13

如果需要在运行时根据用户交互选择实现,则必须自动装配DataSource接口的所有可能实现.

当您自动装配List所需的接口时,Spring将使用每个实现的实例自动填充列表.

@Autowired
private List<DataSource> dataSources;
Run Code Online (Sandbox Code Playgroud)

由您决定,然后根据用户交互选择正确的界面.

如果需要根据bean名称进行区分,还可以选择自动装配在bean名称上编制索引的DataSource对象的字典.

@Autowired
private Map<String, DataSource> dataSourceIndex;
Run Code Online (Sandbox Code Playgroud)

这可以从Spring的2.5版本获得,你可以在这里找到autowire文档


Ser*_*mar 5

使用@Autowired按类型自动装配的注释时,您应该切换到按名称自动装配,这可以使用@Qualifier注释完成

@Autowired
@Qualifier("yourDataSource")
private DataSource dataSource;
Run Code Online (Sandbox Code Playgroud)