Spring Inject Map <qualifier,bean =“”>而不是Map <string,bean =“”>

时间:2015-09-16 09:52:26

标签: java spring

我有一个弹簧设置,其中有不同环境(DEV,PROD)的多个相同类型的实例。通常只有一个环境处于活动状态,可能会使用Spring配置文件,但在这种情况下,我需要在环境之间进行比较。

所以我想做的是: 给定MyService类型的服务,将有两个实例

<bean id="devService" class="MyService">
  <!-- DEV config -->
</bean>

<bean id="prodService" class="MyService">
  <!-- PROD config -->
</bean>

现在消耗它的类需要访问不同环境的实例。 我想的一种方法是在地图中连线。

public MyConstructor(Map<String, MyService> services)

在这种情况下,我会坚持依靠bean名称来弄清楚什么是PROD以及DEV是什么,我对此并不满意。 所以我创建了一个限定符。

@Qualifier
public @interface EnvironmentQualifier {
   Environment value();
   public static enum Environment {
     DEV, PROD;
   }
 }

现在豆子可以合格了:

<bean id="prodService" class="MyService">
  <qualifier type="EnvironmentQualifier" value="PROD" />
</bean>

将构造函数更改为:

public MyConstructor(@EnvironmentQualifier(Environment.PROD) MyService prodService, @EnvironmentQualifier(Environment.DEV MyService devService)

工作得很好但我真正想要的是这样的:

public MyConstructor(Map<Environment, MyService> services)

但我不确定Spring是否可以实现。有没有办法定义自定义注射策略?或者还有其他方法可以解决我的问题吗?

非常感谢提前:)

0 个答案:

没有答案