<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          重寫或替換jar中的類或方法兩種方式

          共 1421字,需瀏覽 3分鐘

           ·

          2022-08-29 12:53

          往期熱門文章:

          1、為什么 "??????".length !== 3 ?

          2、分布式鎖工具Redisson,太香了??!

          3、還在用XShell?Tabby安排上...

          4、Spring Batch 批處理,騷氣還強大!

          5、CTO強烈禁止使用Calendar,那用啥?

          編輯:業(yè)余草

          推薦:https://www.xttblog.com/?p=5355

          序言

          在某些特殊場景下,我們需要修改 jar 包中的某些類和方法。jar 我們沒有修改權(quán)限,那么怎么重寫里面的類和方法呢?本文教你兩種常用的方法,分享給大家,不喜勿噴!

          重寫jar的兩種方式

          第一種

          重寫步驟:

          1. 找到你所要重寫的方法的所在類,查看其中的路徑;

          2. 在我們的 src 目錄下新建一個同包名同類名的類;

          3. 將 jar 包中的重寫方法所在類的所有代碼復(fù)制到我們新建的同包名同類名的類中;

          4. 在我們新建的同包名同類名的類中修改對應(yīng)的方法中的代碼,注意要保持方法中的參數(shù)不要發(fā)生改變,也不要刪除原類中已有的方法,但是可以新增一些方法。

          原理:編譯輸出的時候會優(yōu)先使用我們 src 下面的類,而不是優(yōu)先使用 Jar 包里面的類,這樣就達(dá)到了覆蓋 jar 包方法的目的

          第二種

          在不影響項目目錄結(jié)構(gòu)的情況下可以使用這種方式:

          1. 參考上面第一種方法的步驟 1-4,操作相同。

          2. 將同包名同類名的類重寫好,將.java文件編譯成.class文件。

          3. 桌面新建一個文件夾,將編譯好的.class文件存進(jìn)去。

          4. 打開 jar 包所在的文件目錄


          5. 使用壓縮軟件預(yù)覽 jar 包中的 class 文件

          「壓縮軟件我用的Bandzip」


          6. 將 jar 包中需要替換的類刪除(jar中的原文件),把自己編譯好的.class文件復(fù)制進(jìn)去。

          class文件添加到壓縮文件
          1. 替換


          8. 刪除在我們的 src 目錄下新建的包、類。

          總結(jié)

          兩種方式各有優(yōu)缺點,方案一,實現(xiàn)起來簡單,但是會在你的項目下,多出一個第三方的包路徑。

          比如,我現(xiàn)在的項目包路徑是:com.xttblog.nacos,我現(xiàn)在需要重寫一個 apache 包中的某個類中的代碼,我的項目下就需要新建一個包和類:org.apache.tomcat.utils.HelloUtil

          方案二,其實就是把方案一種產(chǎn)生的 class 文件復(fù)制出來,然后把原來的 jar 包中相同的 class 文件給替換掉,然后重新壓縮成一個新的 jar 文件。方案二會造成,多數(shù)人可能不知道這是一個"野包"。

          一般遇到這種情況,最好是從上游解決。比如,如果是內(nèi)部系統(tǒng),就要求相關(guān)團隊提供新的jar;如果是開源項目,可以提交新的 pr,也可以自己拉取分支,自己公司單獨維護(hù)。其他不知名的野包盡量不建議使用。

          最近熱文閱讀:

          1、為什么 "??????".length !== 3 ?
          2、還在用XShell?Tabby安排上...
          3、Spring Batch 批處理,騷氣還強大!
          4、我的mybatis-plus用法,被全公司同事開始悄悄模仿了!
          5、Spring是如何管理事務(wù)的之@Transactional注解詳解
          6、面試官:如果要存 IP 地址,用什么數(shù)據(jù)類型比較好?99%人都會答錯!
          7、面試官:為什么不能將實數(shù)作為 HashMap 的 key?
          8、Redis 官方可視化工具,高顏值,功能太強大!
          9、不好意思, Maven 該換了!
          10、面試官 | Spring Boot 項目如何統(tǒng)一結(jié)果,統(tǒng)一異常,統(tǒng)一日志?
          關(guān)注公眾號,你想要的Java都在這里

          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色中色俺来也 | 韩国一区视频在线观看 | 特级做a爰片毛片免费69 | 亚洲成人无码高清 | AA片在线观看视频在线播放 |