1

我对 Java 的反射 API 有基本的了解——因此,这不仅是一个如何实现的问题,还是一个是否可行以及我是否正在寻找最佳解决方案的问题。

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

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

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

这可能吗?序列化对象会是更好的方法吗?

4

2 回答 2

3

使用 Java 反射 API 完全可以做到这一点:

  • 按名称加载 Class 实例(Class.forName(className),您实际上并不需要 ClassLoader 实例)
  • Grab Constructor 构造函数实例具有参数并在此构造函数实例上调用 newInstance(Object... args) 以创建 DTO 类的实例。
  • 在您的 Class 实例上调用 getDeclaredFields() 并遍历它们以设置它们的值 (field.set(instance, value))。确保调用 field.setAccessible(true) 才能访问私有字段。
于 2011-10-27T13:13:59.687 回答
0

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

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

于 2011-10-27T13:14:55.387 回答