Java检测类是否是代理

Joh*_*erg 12 java testing proxy mocking cglib

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

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

public boolean classEquals(Class<? extends I> a, Class<? extends I> b);
Run Code Online (Sandbox Code Playgroud)

使得它的计算结果为仅当a.equals(b)Proxy(a).equals(b),其中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);
}
Run Code Online (Sandbox Code Playgroud)

问题是,它没有检测如,CGLIB代理.

Jig*_*shi 11

Proxy.isProxyClass(Foo.class)

  • 很棒,因为它检测到一个 `DynamicProxy`,但似乎无法识别 Mockito 创建的 CGLIB 代理。 (2认同)
  • 不适用于JBoss 6(焊接) (2认同)