如何以编程方式从文件中的值实例化动态加载的类?
我对 Java 的反射 API 有基本的了解 - 因此,这不仅是如何实现的问题,而且是是否可能以及我是否正在以最佳方式寻求解决方案的问题。
我们正在对多个相互关联的项目进行一些验收测试;这些项目中的每一个都使用内部抽象 API 从 MongoDB 存储中检索数据。为了促进此测试,每个组件都需要在数据库中提供一些预加载的数据。
我正在构建一个命令行工具来接受 DTO(预编译的类二进制文件),以便使用 morphia ORM 库加载多个实例。我希望我们团队的每个成员都能够运行生成器,通过 cli 传入其 DTO(以 jar 或目录形式),以及用于实例化所需数量的记录的文件(csv 或其他形式)。
我的类加载工作与 URLClassLoader
配合良好。现在我尝试使用文件中的数据实例化此类的实例。
这可能吗?序列化对象是更好的方法吗?
I have basic knowledge of Java's reflection API - therefore, this is not only a question of how, it's a question of whether it's possible and whether I'm going about a solution the best way.
We're doing some acceptance testing of multiple, interrelated projects; each of these projects retrieve data from a MongoDB store using an in-house abstraction API. To facilitate this testing, each component needs some pre-loaded data to be available in the database.
I'm building a command-line tool to accept a DTO (pre-compiled class binary), for loading of multiple instances using the morphia ORM library. I would like each member of our team to be able to run the generator passing in via cli their DTO (in jar or directory form), and a file (csv or otherwise) for instantiating a desired amount of records.
I have the class loading working fine with URLClassLoader
. Now I'm trying to instantiate an instance of this class using data from a file.
Is this possible? Would serialized objects be a better approach?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 Java Reflection API 完全可以做到这一点:
That's perfectly possible using the Java Reflection API :
如果“序列化对象”指的是固定实例,那么不,通过从文本文件加载属性,您可以更轻松地调整测试数据(如果这是一个目标),包括对象的数量。
但当然,这是可能的;从输入文件中解组数据,并使用它来初始化或构造有问题的对象,就像在常规代码中一样。
If by "serialized objects" you mean canned instances, then no, by loading properties from a text file you allow much easier tweaking of test data (if that's a goal), including the number of objects.
But sure, it's possible; unmarshal the data from the input file and use it to initialize or construct the object in question like you would in regular code.