对于我的应用程序,我有一个Scale
接口和实现该接口的多个类,例如NormalizedScale
, LogScale
等等。在我的一项服务中,我需要创建许多 Scale,并且我想使用 Spring 来定义它应该创建 Scale 的哪个实现。我将如何实现这样的事情?
--
我本来想建一个工厂ScaleFactory
,就像在抽象工厂模式中一样,我可以称之为ScaleFactory.getScale()
获取我在 Spring XML 中配置的任何实现的 Scale:
class ScaleFactory {
Class<? extends Scale> scaleImplClass;
public static Scale getScale() {
return scaleImplClass.newInstance();
}
}
Scale myScale = ScaleFactory.getScale();
但是使用这种方法,我如何从 Spring XML 配置 ScaleFactory 应使用哪个实现?
--
另一种选择是使ScaleFactory
a @Service
,然后将 ScaleFactory 自动连接到我的服务中:
@Autowired
ScaleFactory scaleFactory;
...
Scale myScale = scaleFactory.getScale();
然后我可以使用 ScaleFactory 中的自动装配属性来定义scaleImplClass
。但这看起来很奇怪,因为我的工厂也是一个服务,并且我有该工厂的一个实例。
--
另一种方法是让Class scaleImplementationClass
我的财产service而不是 ScaleFacotry 并使用 ScaleFactory,如下所示:
@Value("${scaleImplementationClass}")
Class scaleImplementationClass
...
Scale myScale = ScaleFactory.getScale(scaleImplementationClass);
但工厂就毫无意义了,因为我也可以运行scaleImplementationClass.newInstance()
.