Java检测类是否是代理

Java检测类是否是代理,java,testing,proxy,mocking,cglib,Java,Testing,Proxy,Mocking,Cglib,是否可以检测类是否是代理(动态,cglib或否则) 让类A和B实现一个公共接口I。然后我需要定义签名的例程classEquals public boolean classEquals(Class<? extends I> a, Class<? extends I> b); 问题是它没有检测到例如CGLIB代理 如果instanceof是可接受的,那么也应该工作 编辑: 我是在读你修改后的答案之前写的。对于类也有类似的方法: 不,一般来说,您无法判断对象是否是代理。这仅仅

是否可以检测类是否是代理动态cglib否则

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

public boolean classEquals(Class<? extends I> a, Class<? extends I> b);

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

如果
instanceof
是可接受的,那么也应该工作

编辑:
我是在读你修改后的答案之前写的。对于类也有类似的方法:


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


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

,我假设
代理(A.class)
为A返回一个代理对象。测试(new A(),A.class)
的结果应该是什么?@Arian,它的值应该为true,所以您不想检测代理,但您想查找类的实例,即使它们是由未知的模拟/代理框架生成的?
实例的情况如何?@Arian,评论不错。虽然我使用的是
而不是
对象
,但不幸的是,它不允许我使用
实例
CGLIB在自己的包中提供了一个
代理.isproxy类
。这可能会检测到它们。很棒,因为它检测到一个
DynamicProxy
,但似乎无法识别Mockito创建的CGLIB代理。do
Foo.getClass().getName()
很有趣,但似乎无法很好地应用于比较。
public boolean classEquals(Class a, Class b) {
    if (Proxy.isProxyClass(a)) {
        return classEquals(a.getSuperclass(), b);
    }
    return a.equals(b);
}