假设我有一个依赖于LittleService
的HigherLevelBean
。 LittleService
是一个具有两个实现的接口(interface)。
没有静态或半静态的方式来判断应该使用这两个实现中的哪一个,它都是动态的(实际上是 session 范围的)。当来自该用户的请求进入时使用 LegacyLittleService
,而对于来自该用户的请求使用 NewShinyLittleService
。
服务不会那么小。它们将有自己的需要注入(inject)的依赖项,并且它们可能来自两个不同的应用程序上下文。考虑在两种不同的模式/数据模型上使用一个应用。
我怎样才能实现这种运行时动态?理想情况下使用注释驱动的配置。我有哪些选择,它们的优缺点?
最佳答案
您可以简单地拥有一个工厂,其中注入(inject)了两种服务:
@Component
public class LittleServiceFactory {
@Autowired
private LegacyLittleService legacy;
@Autowired
private NewShinyLittleService newShiny;
@Autowired
private TheSessionScopedBean theSessionScopedBean;
public LittleService get() {
if (theSessionScopedBean.shouldUseLegacy()) {
return legacy;
}
else {
return newShiny;
}
}
}
现在将这个工厂注入(inject)到任何你想要的地方,并调用 get() 来访问适当的 LittleService 实例。
关于java - Spring - 两个实现之间的运行时选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21957844/