Java检测类是否是代理

是否可以检测类是否是代理动态cglib其他 )?

让类AB实现公共接口I 然后我需要定义一个例程的classEquals签名

 public boolean classEquals(Class a, Class b); 

这样,只有当a.equals(b)Proxy(a).equals(b) ,它才会计算为true ,其中Proxy(a)表示类型A的动态代理(动态,cglib或其他)。


@Jigar Joshi的帮助下,这是迄今为止的样子:

 public boolean classEquals(Class a, Class b) { if (Proxy.isProxyClass(a)) { return classEquals(a.getSuperclass(), b); } return a.equals(b); } 

问题是它没有检测到例如CGLIB代理。

Proxy.isProxyClass(Foo.class)

如果instanceof是可接受的,那么clazz.isInstance(b)应该可以工作。

编辑:
我在阅读您修改后的答案之前写过。 类也有类似的方法:

b.isAssignableFrom(a)

不,通常你无法判断对象是否是代理。 而这仅仅是因为很难定义什么是代理。 你可以实现一个接口并将其用作代理,你可以自己动手使用cglib,asm,javassist,plastic,jdk或者生成字节码。 它与加载xxx.class文件没什么不同。

您正在考虑的可能是检查对象是否由cglib,asm或其他特定库创建。 在这种情况下 – 通常是的。 大多数图书馆都有自己可以发现的指纹。 但总的来说,这是不可能的