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

标签 java testing reflection mongodb morphia

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

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

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

我的类加载与 URLClassLoader 配合得很好。现在,我正在尝试使用文件中的数据实例化此类的实例。

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

最佳答案

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

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

关于java - 如何以编程方式从文件中的值实例化动态加载的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916309/

相关文章:

java - 在过滤的 JTable 上选择特定的表模型元素

c# - 如何获取命名空间中的所有类?

c# - 具有泛型的对象类型中的 "apostrophe + number"是什么意思(例如 "Collection` 1")?

ios - 在 iOS 上测试应用内购买的想法;显示的货币

java - 从 KType 中检索注释

java - 持续集成 - 数据库更改

java - 在 Retrofit 上观察 Observable 时发生 OnError

java - 使用 Java 读取 anchor 标记内的 href

java - 用于比较两个空对象的 junit 测试用例

c# - C# 编译器和 C++/CLI 编译器的输出之间的差异