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

Loading different stateless Spring beans per request

我正在尝试找出使用 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,因此寻找更好的方法(如果可用)。有人可以建议一些替代方法吗?谢谢!

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

@Autowired
Map<String, Mechanic> mechanics;

Mechanic mechanic = mechanics.get(beanName);

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