在我們日常的開發中,經常需要使用第三方的jar包,但是很多時候總是會發現第三方的jar包中的某一個類,有問題,但是又無法繼承,因為你繼承后 變成了你自己的,jar包中 調用的 還是 他自己內部包含的,如何能讓 jar包中調用的類就是我們自己的呢,就是覆蓋jar包中的某一個類。
需求:京東的jar包中的 有一個類寫錯了,京東也不更新他的SDK,且他的SDK沒有源碼,這個時候的解決方案是:
1. 找到錯誤的類,然后反編譯拿到這個類的源碼。
2.在我們自己的項目中的src-java 目錄下,新建一個 與他jar包中 同名的類,舉例:
package com.jd.open.api.sdk.internal.parser;
這樣 就可以修改 這個 JsonParser類 糾正他的錯誤,同時其他地方不做任何改變。外部第三方的 sdk調用這個類的時候,實際上是調用我們自己修改過的,因為優先級的問題,
class目錄下的類 優先級 大於 lib下的類。這點設計的是秒啊!!!。
3.然后再打包成 root.war 就可以了。
=============================================================================================
以下是我自己的測試:
1.common.jar里有一個 ApiResponse類
2.在另一個oauth模塊里 再次建立一模一樣的包路徑的 ApiResponse類
3.在使用 ApiResponse類的時候 會發現他是優先 oauth里 我們自己新建的