我有一个工厂类,它创建某种类型的对象(例如,MyClass
)。
工厂类属于特定包,我想在该包中的实现和较新版本之间动态切换,以进行测试。
例如,原始包为 pack1
,新版本为 pack2
,类名为 pack1.Factory
和 pack2.Factory
。 pack1
或 pack2
的选择将通过属性文件中的简单参数来指定。此外,MyClass
类型对于这两个包来说是通用的,并且只应该使用普通的 Java(即,没有第三方库)。
我正在考虑使用 Class.forName()
来加载 pack1.Factory
或 pack2.Factory
(取决于指定的属性),然后通过反射调用所有工厂方法。
这是最好的方法吗?
最佳答案
这几乎是控制注入(inject)的经典用例。 Guice应该可以让您立即开始。
需要有一个接口(interface),例如IFactory
,以及一些工厂方法create
。创建两个 Guice 模块——一个将 IFactory
绑定(bind)到 pack1.Factory
,另一个绑定(bind)到 pack2.Factory
。当然,这两个工厂都应该实现IFactory
。
然后在主方法中处理确定应使用哪个工厂的参数,并分别基于其中一个模块创建一个注入(inject)器。
关于java - Java 中动态类和包加载的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321909/