如何在java中获取代理对象的基础类型?
我想访问基础类的类名,它是 的一个实例。java.lang.reflect.Proxy
这可能吗?
我想访问基础类的类名,它是 的一个实例。java.lang.reflect.Proxy
这可能吗?
您可以通过调用InvocationHandler
Proxy.getInvocationHandler(proxy)
请注意,在没有基础类本身的情况下。代理由以下定义:java.lang.reflect.Proxy
包装的类通常传递给具体的调用处理程序。
我在这个网站上找到了一个很好的解决方案(现已存档):
@SuppressWarnings({"unchecked"})
protected <T> T getTargetObject(Object proxy, Class<T> targetClass) throws Exception {
if (AopUtils.isJdkDynamicProxy(proxy)) {
return (T) ((Advised)proxy).getTargetSource().getTarget();
} else {
return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class
}
}
用法
@Override
protected void onSetUp() throws Exception {
getTargetObject(fooBean, FooBeanImpl.class).setBarRepository(new MyStubBarRepository());
}