分析
對(duì)Proxy做判等要根據(jù)業(yè)務(wù)場(chǎng)景,需要被代理的實(shí)例相等呢?還是Proxy實(shí)例相等?如果是Proxy實(shí)例相等,則要注意調(diào)用Proxy.equals()存在死循環(huán)問題。Proxy.equals會(huì)再次調(diào)用Proxy.equals的方法,invoke(proxy,args)會(huì)產(chǎn)生死循環(huán),用this代表的是InvocationHandler,所以要自己寫一份equalsInternal()比較方法
if (method.getDeclaringClass() == Object.class) {
if (method.equals(OBJECT_EQUALS)) {
return equalsInternal(proxy, args[0]);
}
return method.invoke(this, args);
}
private static boolean equalsInternal(Object me, Object other) {
if (other == null) {
return false;
}
return me.hashCode() == other.hashCode();
}