我想做棘手的事。我有方法ObjectFactory.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()
作为一个代理,所以它可能会无休止地循环调用自己。我没有找到如何将这个代理解包成一个真正的对象,除了用 Advise
但它不适合这个代理。你能猜到是哪里出了问题吗?
让我们来看看这一行。
Object result = ((ObjectFactory<?>) proxy).getObject();
你觉得会发生什么?
也许调用 objectFactory
而不是?