Создайте прокси-класс с помощью конструктора без аргументов - PullRequest
2 голосов
/ 08 сентября 2011

Используя java.lang.reflect.Proxy, я могу создать класс, который принимает InvocationHandler в качестве аргумента конструктора. Тем не менее, класс будет создан с помощью newInstance() где-то в структуре, и InvocationHandler может быть одинаковым для всех экземпляров.

Могу ли я добавить конструктор без аргументов в прокси-класс, который передает мой InvocationHandler исходному конструктору?

1 Ответ

3 голосов
/ 08 сентября 2011

Боюсь, это не сработает, так как настоящая прокси-магия происходит в этом родном коде

private static native Class defineClass0(ClassLoader loader, String name,
                     byte[] b, int off, int len);

, доступ к которому возможен только через статический метод Proxy.newProxyInstance(ClassLoader, Class<?>[], InvocationHandler).Этот метод, в свою очередь, вызывает конструктор сгенерированного таким образом класса с предоставленным InvocationHandler в качестве параметра.

Так что у вас нет возможности вернуть Proxy из вызова newInstance().Самое близкое, что вы можете получить, - это создать экземпляр InvocationHandler с помощью newInstance() и передать его статическому фабричному методу.

Или вы можете сделать еще один шаг вперед, получить класс, реализующий целевой интерфейс(s), создает поле прокси через фабричный метод и делегирует все методы интерфейса Прокси.Но это будет прокси вокруг прокси, и я действительно не вижу в этом смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...