如何對多個動態代理例項做判等?
分析
對Proxy做判等要根據業務場景,需要被代理的例項相等呢?還是Proxy例項相等?如果是Proxy例項相等,則要注意呼叫Proxy.equals()存在死迴圈問題。Proxy.equals會再次呼叫Proxy.equals的方法,invoke(proxy,args)會產生死迴圈,用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();
}
相關文章
- 如何為一個例項動態替換方法
- Spring動態代理的生成-如何判斷是使用JDK動態代理還是CGlib代理SpringJDKCGLib
- oracle多個例項啟動方法Oracle
- 動態代理、多型原理多型
- 對於物件的動態建立例項問題物件
- mysqld_multi啟動多個mysql例項MySql
- docker redis 多個例項DockerRedis
- 對JAVA動態代理的理解Java
- 【乾貨】JDK動態代理的實現原理以及如何手寫一個JDK動態代理JDK
- java動態代理如何使用Java
- Java動態代理與靜態代理以及它能為我們做什麼Java
- 例項詳解如何構建動態SQL語句SQL
- 多個mapreduce連線例項
- 一臺MySQL資料庫啟動多個例項MySql資料庫
- linux自動automatic啟動停止多個oracle例項LinuxOracle
- css多列等寬分佈程式碼例項CSS
- js如何判斷一個變數是null、undefined例項程式碼JS變數NullUndefined
- Java代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- 對接多個 Neuron 例項,實現多閘道器協同分析與裝置聯動
- oracle一個例項配置多個listener或多個埠Oracle
- 例項動態註冊跟蹤
- 動態VLAN詳細配置例項
- shell動態修改yml配置例項
- 靜態代理和動態代理
- JAVA 靜態代理 & 動態代理Java
- oracle 多個例項監聽不到Oracle
- 如何判斷一個值是否等於NaNNaN
- 代理模式詳解:靜態代理、JDK動態代理與Cglib動態代理模式JDKCGLib
- 代理模式 - 動態代理模式
- oracle一個別例項配置多個listener或多個埠Oracle
- Android應用開發—PendingIntent:如何判斷兩個PendingIntent對等AndroidIntent
- java靜態代理和動態代理Java
- 動態代理
- javascript動態建立元素程式碼例項JavaScript
- 移動端判斷觸屏位置程式碼例項
- java多型-優化上個例項Java多型優化
- oracle 多個例項安裝監聽Oracle
- 一個例項中,多個synchronized方法的呼叫synchronized