我有一个弹簧设置,其中有不同环境(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是否可以实现。有没有办法定义自定义注射策略?或者还有其他方法可以解决我的问题吗?
非常感谢提前:)