gpt4 book ai didi

gwt - gwt 中的动态代理

转载 作者:行者123 更新时间:2023-12-03 19:29:08 25 4
gpt4 key购买 nike

可以在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需要时,发电机将插入 MyClassOneMyClassTwo基于某些条件。

如果你只需要用你的实现替换一个类/接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com