每个请求加载不同的无状态 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,而是将它们自动连接到您自己的映射并从那里获取它们。可以考虑更好的样式,或者如果您有不能直接访问上下文的要求。
我正在尝试找出使用 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,而是将它们自动连接到您自己的映射并从那里获取它们。可以考虑更好的样式,或者如果您有不能直接访问上下文的要求。