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

标签 java reflection dynamic loading

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

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

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

我正在考虑使用 Class.forName() 来加载 pack1.Factorypack2.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/

相关文章:

java - 泛型 : List<? 扩展 Animal> 是否与 List<Animal> 相同?

java - 在运行时将 Javacode 注入(inject)已部署的 (Vaadin-)Application

php - ReflectionClass getDocComment 返回 false

c# - 如何从字符串表示中获取泛型类型?

javascript - 通过appendChild()可以添加哪些JS对象?

java - 在 BlackBerry 上解析 XML 字符串

java - 在浏览器中调试 java applet - 在 Eclipse 中工作但在浏览器中不工作

c# - 使用反射获取属性引用

javascript - 为什么我不能向我的 HTML 表格中动态添加行?

python - 动态设置局部变量