Java中动态类和包加载的最佳方法

时间:2012-04-25 18:47:26

标签: java reflection dynamic loading

我有一个工厂类,可以创建某种类型的对象(比如MyClass)。

工厂类属于特定的包,我想在该包中的实现和较新的版本之间动态切换,以进行测试。

例如,假设原始软件包为pack1,较新版本为pack2,类名为pack1.Factorypack2.Factorypack1pack2的选择将通过属性文件中的简单参数指定。此外,MyClass类型对于两个包都是通用的,并且只应使用普通的Java(即,没有第三方库)。

我正在考虑使用Class.forName()加载pack1.Factorypack2.Factory(取决于指定的属性),然后通过反射调用所有工厂方法。

这是最好的方法吗?

2 个答案:

答案 0 :(得分:3)

这几乎是注射控制的经典用例。 Guice应该让你立刻开始。

需要使用IFactory等接口,并使用一些工厂方法create。创建两个Guice模块 - 一个绑定IFactorypack1.Factory,另一个绑定到pack2.Factory。当然,这两家工厂都应该实施IFactory

然后在main方法处理中确定应该使用哪个工厂的参数,并分别根据其中一个模块创建一个注入器。

答案 1 :(得分:-1)

你应尽可能避免反思。它使您的代码更难理解,更难以重构和更难维护。

相反,您可以让工厂类实现一个接口,创建一个您要测试的工厂实例,并使用此实例调用您的测试。