我想使用一个仅在我的运行时环境中可用的类,并且我没有它的任何.java或.class文件。使用它的唯一方法是通过反射。
我已经做的是写一个小程序来获取我的目标类的Class
实例,迭代它的公共方法/字段并获得它们的签名(类似于这个程序)。这将给我一个.java源文件的框架。然后我手动填充这些方法的主体,以便它们使用反射调用真正的方法。这样的Java文件是用javac编译的,连同我的用户代码。这样我就可以使用目标类,而不用在代码中填充方法/字段getter。
以下是我的问题:
- 是否有一个特定的术语来描述我正在尝试做的事情?("Java反射包装代码生成器"可能?)
- 是否有工具可以自动执行我上面手动完成的任务?
- 如果没有,构建这样一个工具的挑战是什么?
你尝试做的是一个代理类。许多框架使用它来注入一些自动化、事务等…例如Java EE, Spring。
有两种方法:简单的java.lang.reflect。代理,但它有一个约束:你的类必须实现一个接口,并且只能调用接口中的方法。
更复杂的依赖于字节码生成,你可以使用Mockito框架生成所有你需要的东西:它是用于测试的,但也可以用来生成覆盖现有类的任何类型的类。
如果你需要的话,我可以用例子来完成我的回答。