powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Dynamic proxy: вызов вложенных методов из проксируемого класса.
5 сообщений из 5, страница 1 из 1
Dynamic proxy: вызов вложенных методов из проксируемого класса.
    #38035187
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, появился вопрос. У меня есть класс, и для него Dynamic proxy и InvocationHandler. Вот класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Victim implements IVictim{
    @Override
    public void f() {
       System.out.println("Victim f()");
    }
    @Override
    public void g() {
        System.out.println("Victim g()");
        f();
     }
 }


InvocationHandler как в примере у оракла. Я ожидал, что при вызове метода g() прокси перехватит и g() и f(), но этого не происходит. Видимо я неправильно понял или не понял что-то фундаментальное. Подскажите, что именно, пожалуйста.
...
Рейтинг: 0 / 0
Dynamic proxy: вызов вложенных методов из проксируемого класса.
    #38035205
хорошо бы увидеть хоть какой-то код: код InvocationHandler, код создания объекта-прокси

>>ожидал, что при вызове метода g() прокси перехватит и g() и f(), но этого не происходит
как понять "при вызове метода g() прокси перехватит и g() и f()"?
...
Рейтинг: 0 / 0
Dynamic proxy: вызов вложенных методов из проксируемого класса.
    #38035213
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокси ничего не "перехватывает". Он "оборачивает". В этом существенная разница.
Поэтому если вызвать proxy.f(), то вызовется InvocationHandler. А если вызвать intance.f(), то метод вызовется безовсяких прокси.
У вас там вызов this.f() напрямую, кончено же он мимо прокси идёт. Стандартный геморой в Spring/JEE.
...
Рейтинг: 0 / 0
Dynamic proxy: вызов вложенных методов из проксируемого класса.
    #38035216
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Валентин,

как понять "при вызове метода g() прокси перехватит и g() и f()"?
вот так:
Код: java
1.
2.
3.
4.
5.
//g()
 public void g() {
        System.out.println("Victim g()");
        f();//<------вызов f()
     }


внутри g() вызывается f(). Оба метода интерфейсные, но вложенный вызов f() не перехватывается.

хорошо бы увидеть хоть какой-то код: код InvocationHandler, код создания объекта-прокси
код ровно как у оракла, создание прокси внутри - статический метод newInstance(Object obj)
Вот код хендлера:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class Master implements InvocationHandler{
   private Object obj;

    public static Object newInstance(Object obj) {
	return java.lang.reflect.Proxy.newProxyInstance(
	    obj.getClass().getClassLoader(),
	    obj.getClass().getInterfaces(),
	    new Master(obj));
    }

    private Master(Object obj) {
	this.obj = obj;
    }

    public Object invoke(Object proxy, Method m, Object[] args)
	throws Throwable
    {
        Object result;
	try {
	    System.out.println("before method " + m.getName());
	    result = m.invoke(obj, args);
        } catch (InvocationTargetException e) {
	    throw e.getTargetException();
        } catch (Exception e) {
	    throw new RuntimeException("unexpected invocation exception: " +
				       e.getMessage());
	} finally {
	    System.out.println("after method " + m.getName());
	}
	return result;
    }
}
...
Рейтинг: 0 / 0
Dynamic proxy: вызов вложенных методов из проксируемого класса.
    #38035218
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо, иногда на очевидные вещи нужно тыкать пальцем.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Dynamic proxy: вызов вложенных методов из проксируемого класса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]