每个请求加载不同的无状态Spring bean

时间:2018-07-19 08:50:07

标签: java spring dependency-injection inversion-of-control

我正在尝试找出使用Spring(或不使用Spring)按需加载bean的最佳方法。这是一个例子。假设有两种类型的机械豆

@Bean("japanese-mechanic")
public Mechanic japaneseMechanic(){
  return new JapaneseMechanicImpl
}

@Bean("german-mechanic")
public Mechanic germanMechanic(){
  return new GermanMechanicImpl
}

我的问题是如何为每个请求加载正确的bean。当前,我们使用“ Context.getBean”的方式,所以它看起来像

String beanName = request.getParameter("typeOfCar") + "-mechanic";
Mechanic mechanic = Context.getBean(beanName,Mechanic.class);

我知道以这种方式调用“ Context.getBean”违反了IOC,因此正在寻找一种更好的方法(如果可用)。有人可以建议一些替代方法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过将所有机制连接到自己的地图来避免直接访问上下文,如下所示:

console.log([1, 1.23, 1.23456].map(v => v.toFixed(3).replace(/\.?0+$/, '')))

因此,您无需将它们从上下文映射中获取,而是将它们自动连接到自己的映射并从那里获取它们。可以认为是更好的样式,或者如果您有无法直接访问上下文的要求。