-1

我必须开发通过 RMI 进行通信的客户端和服务器组件。

public interface Test {
  public String getInformation();
}

public class TestImpl implements Test {

    public String getInformation() {
        return “Hello”;
    }
}

此 Test 接口可在 RMI 客户端执行,但在 RMI 服务器中不可用此 Test 接口和 TestImpl 类,但所有这些类名、方法名、参数、返回类型都可作为元数据使用(保存在 DB 中)。我需要在服务器端虚拟生成 Test 和 TestImpl 类并将它们注入 RMI 服务器。我该怎么做呢?

4

1 回答 1

0

如果您想从存储在 DB 中或以其他方式存储的类名、方法名、参数类型、返回类型等生成RMI 服务器类,您可以使用几种著名的字节码检测工具中的任何一种,例如ASM(最流行) 、JavassistBCEL(JDK 至少从 1.5 版开始也提供嵌入式版本)。(我不确定“虚拟”生成是什么意思,“虚拟”和“非虚拟”类生成有什么区别)。注入,如果你的意思是像这里一样使用 java.rmi.registry.Registry 注册 ,生成类的实例是微不足道的,并且与任何其他 RMI 服务器的“注入”没有区别。

附带说明:您的设计似乎很不寻常。在数据库中存储类名、方法名等是一回事。另一个是所有这些信息都是在您的案例中在客户端定义的,而通常情况正好相反。无论如何,如果您需要采用这种设计,那么,作为一种选择,您可以考虑将接口以 .class 文件的编译(二进制)形式存储在数据库中,而不是类名、方法名等的文本定义。在这种情况下,您不需要搞乱字节码生成,并且可以使用普通的 Java 反射代理/调用处理程序,或者最坏的情况是简单的CGLIB代理。

于 2013-07-08T02:10:42.297 回答