Я пытаюсь сделать сложную вещь. У меня есть метод O bjectFactory.getObject()
, который возвращает Object
, который должен реализовать Serializable
. Я пытаюсь создать прокси для уже существующего экземпляра ObjectFactory
, перехватить его метод getObject()
и затем обернуть возвращенный объект в прокси, который реализует Serializable
.
@Override
public Object get(String name, ObjectFactory<?> objectFactory) {
...
ObjectFactory<?> serializableObjectFactory = (ObjectFactory<?>)Proxy.newProxyInstance(CurrentClass.class.getClassLoader(), new Class[]{ObjectFactory.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//Here I'm getting StackOverflow exception. I guess, it just invokes itself recursively. Don't know why
Object result = ((ObjectFactory<?>) proxy).getObject();
//Here I make object implement Serializable
return Mixin.create(new Class[]{Serializable.class, result.getClass()}, new Object[] {result});
}
});
...
return super.get(name, serializableObjectFactory);
}
Когда код достигает Object result = ((ObjectFactory<?>) proxy).getObject()
, он, кажется, просто вызывает себя рекурсивно (я получаю исключение StackOverflow
), и я понятия не имею, почему.
У меня есть два предположения, в которых я не уверен:
- Я неправильно использую прокси. Но я проверил, и, похоже, все в порядке.
- Объектный прокси в методе
invoke()
поставляется как прокси, поэтому он может вызывать себя в бесконечном l oop. Я не нашел, как развернуть этот прокси в реальный объект, кроме Advise
, но он не подходит этому прокси.
У вас есть какие-нибудь догадки, что не так?