一个InvocationHandler的几个接口

时间:2012-11-12 04:01:22

标签: java distributed invocation method-invocation

是否可以为具有不同接口的SEVERAL对象定义一个invocationhandler(代理)?

因为这个代理在对象上的作用(所有检查和等等)是相同的(并且它们共享一个锁管理表,我更喜欢在一个地方的代理上使用它),

有办法吗?

谢谢, 阿里安

2 个答案:

答案 0 :(得分:1)

嗯,这样做的方法是让一个基类代表你的公共IH代码,然后为每个特定的调用子类化它。

否则,您可以检查进入的对象,并确定适当的操作:

public Object invoke(Object proxy, Method method, Object[] args) {
    if (proxy instanceof InterfaceA) {
        handleInterfaceA(proxy, method, args);
    } else if (proxy instanceof InterfaceB) {
        handleInterfaceB(proxy, method, args);
    }
}

但是由于Java已经有了类调度机制,因此最好使用它而不是一堆IF或switch语句。

答案 1 :(得分:0)

Proxy.newProxyInstance专门接受一组接口,然后返回的代理实现所有接口:

Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{Foo.class, Bar.class} , new Handler())

我猜你必须先将代理转发给每个不同的接口,然后才能调用它上面的相关方法,但无论如何你总是必须抛出它,即使你只实现了一个接口。

我不确定问题是什么;如果这不是你的意思那么也许你可以澄清一下?