可以在gwt中创建动态代理吗?我想创建库 它改变了某些类的方法的行为(接口(interface)将是 参数),例如,当用户调用实现类的方法时 接口(interface),它将始终返回字符串“abc”。在java中它会是 像这样的东西:
public class proxyHandler implements InvocationHandler {
private Object proxied;
public proxyHandler(Object proxied) {
this.proxied = proxied;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return "abc";
}
}
public static void main(String[] args) {
Object object = new Object();
Interface proxy = (Interface) Proxy.newProxyInstance(
Interface.class.getClassLoader(),
new Class[] { Interface.class }, new proxyHandler(object));
System.out.println(proxy.getName());
}
可以在 gwt 中执行类似的操作(使用延迟 绑定(bind),无论如何)?感谢您的帮助
但我不想为 MyClassOne 或 MyClassTwo 创建代码。我想创建动态代理 - 创建一个为任何类型的对象提供服务的类(如java示例中的proxyHandler)。我想用户给我一个接口(interface)/类,然后我返回一个对象(如上面的接口(interface)代理),他可以像普通类一样使用它,但它会做更多的事情。
GWT 反射从 2007 年开始就没有更新。我还查看了 gwittir 和 gwt-ent,但我找不到任何如何在其中动态代理的信息
最佳答案
是的,GWT 提供了一种“插入”您自己的类和接口(interface)实现的方法。 这是通过生成器完成的。
一个例子:
public class MyGenerator extends Generator{
public String generate(TreeLogger logger, GeneratorContext context,
java.lang.String typeName)
throws UnableToCompleteException {
if (someCondition) {
return "com.mypackage.MyClassOne"
} else {
return "com.mypackage.MyClassTwo"
}
}
}
然后在您的 .gwt.xml 文件中使用它:
<generate-with class="com.mypackage.MyGenerator">
<when-type-assignable class="com.otherpackage.SomeClass" />
</generate-with>
所以当 SomeClass
需要时,发电机将插入 MyClassOne
或MyClassTwo
基于某些条件。
如果你只需要用你的实现替换一个类/接口(interface),那么你不需要使用生成器,只需使用<replace-with>
在您的 gwt 模块声明中:
<replace-with class="com.mypackage.MyClass">
<when-type-is class="com.otherpackage.SomeClass"/>
</replace-with>
查看此博文,了解有关生成器的更多信息:
http://blog.jdevelop.eu/2010/01/17/use-generators-to-create-boilerplate-code-in-gwt-20/
http://blog.jdevelop.eu/2010/01/17/use-generators-to-create-boilerplate-code-in-gwt-20/
关于gwt - gwt 中的动态代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278310/