如何以编程方式从文件中的值实例化动态加载的类?

时间:2011-10-27 13:09:27

标签: java testing reflection mongodb morphia

我对Java的反射API有基本的了解 - 因此,这不仅是一个问题,它是一个问题,它是否可行以及我是否以最佳方式寻求解决方案。

我们正在对多个相互关联的项目进行一些验收测试;这些项目中的每一个都使用内部抽象API从MongoDB存储中检索数据。为了便于此测试,每个组件都需要在数据库中提供一些预加载的数据。

我正在构建一个命令行工具来接受DTO(预编译的类二进制文件),以便使用morphia ORM库加载多个实例。我希望我们团队的每个成员能够运行生成器通过cli传递他们的DTO(以jar或目录形式),以及文件(csv或其他)来实例化所需数量的记录。

我的班级加载工作正常URLClassLoader。现在,我正在尝试使用文件中的数据来实例化此类的实例。

这可能吗?序列化对象会更好吗?

2 个答案:

答案 0 :(得分:3)

使用Java Reflection API完全可以:

  • 按名称加载类实例(Class.forName(className),您实际上不需要ClassLoader实例)
  • Grab构造函数的构造函数实例具有参数并在此构造函数实例上调用newInstance(Object ... args)以创建DTO类的实例。
  • 在Class实例上调用getDeclaredFields()并迭代它们以设置它们的值(field.set(instance,value))。确保调用field.setAccessible(true)以便能够访问私有字段。

答案 1 :(得分:0)

如果“序列化对象”是指罐装实例,则不是,通过从文本文件加载属性,您可以更轻松地调整测试数据(如果这是一个目标),包括对象数量。

但是可以肯定的是,这是可能的;从输入文件中解组数据并使用它来初始化或构造有问题的对象,就像在常规代码中一样。