Java,动态创建界面?

时间:2010-10-14 08:49:06

标签: java spring osgi cglib

我正在寻找在运行时创建接口的解决方案。无论如何,我真的不知道这是否可能。

问题:

我有一个OSGi服务,它发布一个Map<String,String>,其中密钥定义了此服务的操作。我想用spring Hessian服务直接发布这个服务,但为此,我需要delcare一个接口。现在我想在运行时创建这个接口。

4 个答案:

答案 0 :(得分:3)

可以动态创建接口,例如通过使用ASM等字节码操作库生成接口。但是使用该接口是不可能的,因为没有代码可以针对它编译(除非你动态生成使用它的代码)。

你想做什么?

答案 1 :(得分:2)

你不能真的这样做(除非你涉及字节码maniuplation / creation,我不认为这是最好的路径。)

如果你没有任何东西可以访问该界面,动态创建的界面会有什么用呢?

或者换句话说:没有什么可以针对动态创建的接口进行编译(因为它在编译时不存在,显然)。那么谁会使用它?

答案 2 :(得分:0)

another question中选择以下答案。该示例实际上写了一个新类,所以这可能会对你有帮助。

JDK6有一个Java compiler API。但是,它不一定非常容易使用。

快速谷歌提升了这个example usage

答案 3 :(得分:0)

接口和类仅用于帮助编译器找到可能的错误。如果你想在运行时创建这个接口,你没有编译器,因为它不会找到你的错误,所以为什么你需要这个接口?

在这种情况下,只需发布​​一些通用接口的实现,它们看起来像: interface GenericInterface {     Object invokeMethod(String name,Object ... arguments); } 这是您需要的唯一界面,您可以在编译时创建它!您可能只需要在运行时创建它的实现,例如使用java.lang.reflect.Proxy