Java 动态RMI方法生成

Java 动态RMI方法生成,java,dynamic,classloader,rmi,Java,Dynamic,Classloader,Rmi,我必须开发通过RMI进行通信的客户端和服务器组件 public interface Test { public String getInformation(); } public class TestImpl implements Test { public String getInformation() { return “Hello”; } } 此测试接口可在RMI客户端执行,但在RMI服务器中不可用此测试接口和TestImpl类,但所有这些类名、方

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

public interface Test {
  public String getInformation();
}

public class TestImpl implements Test {

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

此测试接口可在RMI客户端执行,但在RMI服务器中不可用此测试接口和TestImpl类,但所有这些类名、方法名、参数、返回类型都可以作为元数据(保存在数据库中)使用。我需要在服务器端虚拟地生成Test和TestImpl类,并将它们注入RMI服务器。如何实现这一点?

如果您想从存储在DB中或以其他方式的类名、方法名、参数类型、返回类型等生成RMI服务器类,您可以使用几种著名的字节码检测工具,如(最流行的)或(嵌入式版本也可在JDK中使用,因为至少版本为1.5)。 (我不知道“虚拟”生成意味着什么,以及“虚拟”和“非虚拟”类生成之间的区别是什么)。 生成的类的实例的注入(如果您是指类似于java.rmi.registry.registry的注册)是微不足道的,与任何其他rmi服务器的“注入”没有区别

作为旁注:看起来您的设计很不寻常。在DB中存储类名、方法名等是一回事。另一件事是,所有这些信息都是在客户端定义的,而通常情况下是相反的。
不管怎样,如果您需要使用这个设计,那么,作为一个选项,您可以考虑在DB中存储编译的(二进制)接口。.class文件的形式,而不是类名、方法名等的文本定义。在这种情况下,您不需要搞乱字节码生成,可以使用普通Java反射代理/调用处理程序,或者最坏的情况下使用简单代理。

尝试Spring及其依赖项注入引擎。您在这里重新发明了很多轮子。Define.Defin“动态RMI方法生成”。定义“虚拟生成”。定义显然需要测试不存在的服务的原因。