如何在java中获取代理对象的基础类型?

2022-09-01 06:27:42

我想访问基础类的类名,它是 的一个实例。java.lang.reflect.Proxy

这可能吗?


答案 1

您可以通过调用InvocationHandlerProxy.getInvocationHandler(proxy)

请注意,在没有基础类本身的情况下。代理由以下定义:java.lang.reflect.Proxy

  • 接口
  • 调用处理程序

包装的类通常传递给具体的调用处理程序。


答案 2

在这个网站上找到了一个很好的解决方案(现已存档):

@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());
}

推荐