gwt - gwt 中的动态代理

标签 gwt dynamic binding proxy

可以在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/

相关文章:

java gwt 空指针?

css - GWT - 第一步 - Div+label+css 样式

c++ - 使用逻辑循环的动态内存阵列

在 C 中更改二维动态数组的大小

wpf - xaml 中的鼠标位置 - wpf

css - GWT 设计一个按钮

java - 在 GWT 中为不同页面使用元标记?

javascript - 页面加载后仅重新加载一个(切换)文件

WPF - 从组标题样式中绑定(bind)到当前项目

wpf - 如何以编程方式设置 ContentControl 的 ContentTemplate