【发布时间】:2011-11-22 04:50:04
【问题描述】:
是否可以检测类是否是代理(动态、cglib或否则)?
让类A和B实现一个公共接口I。然后我需要定义一个签名的例程classEquals
public boolean classEquals(Class<? extends I> a, Class<? extends I> 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 代理。
【问题讨论】:
-
在您的
test方法中,我想Proxy(A.class)会为A 返回一个代理对象。test(new A(), A.class)的结果应该是什么? -
@Arian,它应该评估为真
-
所以你不想检测代理,但你想找到一个类的实例,即使它们是由未知的模拟/代理框架生成的?
instanceof呢? -
@Arian,好评。虽然我正在使用
Classes而不是Objects,但不幸的是这不允许我使用instanceof -
CGLIB 在自己的包中提供了
Proxy.isProxyClass。这可能会检测到它们。
标签: java testing proxy mocking cglib