почему метод invoke () в InvocationHandler имеет параметр Object proxy? - PullRequest
5 голосов
/ 20 декабря 2010

Когда вы проверяете, что метод вызывает объявление (Object proxy, Method method, Object [] args) и оператор doc, вы обнаружите, что входной параметр proxy

proxy -экземпляр прокси, который был вызван методом

, когда я делаю тест на динамическом прокси Java, я обнаружил, что этот прокси создан vm.Так я хочу знать, почему метод вызова имеет этот параметр, что, конечно же, ничего, кроме того, что это просто объект ($ proxy0), но у нас нет действительного действия для нашего использования?

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

Это очень полезно, если у вас есть один дескриптор вызова для нескольких прокси-объектов. Таким образом, вы можете использовать хэш-карту для хранения информации о состоянии прокси. Например, тестовая среда Mokito хранит историю вызовов прокси.

0 голосов
/ 21 декабря 2013

если вы китаец, вы можете прочитать эту статью http://rejoy.iteye.com/blog/1627405

он декомпилирует $ proxy0.class, вы должны знать, что $ proxy0 расширяет Proxy

public final class $Proxy0 extends Proxy  
    implements UserService 

и в $ proxy0 есть функция:

public final void add()  
    {  
        try  
        {  
            //the h(invocationhandler) is in Proxy class,so we need pass this $proxy0 instance to super ,so the super(Proxy) can invoke($proxy0,method,args)
            super.h.invoke(this, m3, null);  
            return;  
        }  
        catch(Error _ex) { }  
        catch(Throwable throwable)  
        {  
            throw new UndeclaredThrowableException(throwable);  
        }  
    }  
...