Javassist: как создать прокси прокси?

Я создаю прокси с javassist ProxyFactory. При создании единственного прокси все хорошо работает.

Однако, когда я передаю объект прокси механизму проксирования, он перестал работать с

javassist.bytecode. DuplicateMemberException: повторяющийся метод: setHandler в com.mypackage. $$ Bean_ _javassist_0_ $$ _javassist_1

Я создаю прокси с этим:

public Object createProxiedInstance(Object originalInstance) throws Exception {
    Class<?> originalClass = instance.getClass();
    ProxyFactory factory = new ProxyFactory();

    factory.setSuperclass(originalClass);

    factory.setHandler(new MethodHandler() {..});
    Class<T> proxyClass = factory.createClass();

    return proxyClass.newInstance();
}

Так, как я создаю прокси прокси?

Обновление: фактические проблемы состоят в том, что каждый прокси реализует ProxyObject который определяет setHandler(..) метод. Таким образом, 2-й прокси пытается переопределить метод, вместо того, чтобы переопределить его в подклассе.

9
задан Bozho 12 April 2010 в 02:33
поделиться

1 ответ

Проблема заключалась (на самом деле, то же самое и с CGLIB - я пробовал использовать commons-proxy), что я не должен пытаться создать прокси-класс для прокси-класс. Второй прокси снова должен быть оригинального класса. Таким образом, добавление следующей строки решает проблему:

if (instance instanceof ProxyObject) {
    originalClass = originalClass.getSuperclass();
}

И совет - если вы можете использовать какие-то перехватчики (например, определенные в commons-proxy), делайте это вместо использования нескольких прокси.

4
ответ дан 3 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: