如何“修改”底層框架原始碼中的某些功能
背景:
公司專案中所有實體的id全部是通過資料庫自增的方式設定的,這樣當資料量很龐大的時候,就會出現錄入資料超級慢的問題,因為資料庫要遍歷整個表的資料,獲取到最大id才能插入一條資料。
提出解決方案:
新建一個ids表專門儲存每張表的最大id和表名字,這樣,當向某個表中插入資料的時候,先在ids表中查一下這個表對應的最大id,這樣就不用遍歷整個表了。
開始開發:
因為專案中已經寫死,插入資料庫資料全部用的是自增。讓在每個插入資料的程式碼中加查詢ids表實在是個不可取的方法,工作量可想而知。
因為我們插入資料的時候全部用的是bugumongo框架(當然如果你們的是MySQL資料庫的話,是其他框架咯),先用反編譯軟體檢視儲存資料庫資料的原始碼。
檢視原始碼。匯出原始碼包
eclipse關聯原始碼包
修改原始碼的方式,可以直接利用反編譯軟體得到原始碼包,然後修改原始碼,重新生成自己的jar,替換原來的jar包就可以了。(當這個過程有點繁瑣)
這裡採用重寫獲取最大id的方法。只要保證包名和原始碼中的完全一致就行。
這樣就大功告成了。
當然有人可能會說用spring aop的方式加前置通知來實現這個功能。(大部分專案中這也是可以的,但這個方式有侷限性。)
如有不懂的地方請聯絡本人qq:1913284695
相關文章
- ThreadLocal底層原始碼解析thread原始碼
- HasMap 底層原始碼分析ASM原始碼
- Owin Katana 的底層原始碼分析原始碼
- 深入分析Java中的PriorityQueue底層實現與原始碼Java原始碼
- iOS底層原理總結 -- 利用Runtime原始碼 分析Category的底層實現iOS原始碼Go
- JAVA ArrayList集合底層原始碼分析Java原始碼
- PHP 底層原始碼下載地址PHP原始碼
- 原始碼防洩密的底層安全基石原始碼
- 關於Laravel框架中Guard的底層實現Laravel框架
- 筆記-runtime原始碼解析之讓你徹底瞭解底層原始碼筆記原始碼
- spring原始碼解析 (七) 事務底層原始碼實現Spring原始碼
- ArrayList底層結構和原始碼分析原始碼
- PHP底層核心原始碼之變數PHP原始碼變數
- ArrayList 從原始碼角度剖析底層原理原始碼
- Golang 切片(Slice)底層原始碼閱讀Golang原始碼
- 從底層邏輯入手,直播商城原始碼如何發展的長久?原始碼
- 持久層Mybatis3底層原始碼分析,原理解析MyBatisS3原始碼
- Golang WaitGroup 底層原理及原始碼詳解GolangAI原始碼
- Android Compose 入門,深入底層原始碼分析Android原始碼
- Seata原始碼分析(一). AT模式底層實現原始碼模式
- HashMap底層資料結構原始碼解析HashMap資料結構原始碼
- flask框架如何實現修改密碼和免密登入功能Flask框架密碼
- 修改所有xml檔案中的某些內容XML
- k8s 底層修改埠K8S
- 網站開原始碼修改,如何在本地開發環境中修改網站開原始碼網站原始碼開發環境
- iOS系統的底層通知框架庫iOS框架
- 屬性填充底層原始碼深入剖析前戲原始碼
- 【Flink】Flink 底層RPC框架分析RPC框架
- Vue中的底層原理Vue
- 深入底層|JVM原始碼解讀:HotSpot的模板直譯器JVM原始碼HotSpot
- SpringBoot原始碼分析之條件註解的底層實現Spring Boot原始碼
- 七、真正的技術——CAS操作原理、實現、底層原始碼原始碼
- Redis原始碼分析-底層資料結構盤點Redis原始碼資料結構
- Java併發集合類ConcurrentHashMap底層核心原始碼解析JavaHashMap原始碼
- Java集合類,從原始碼解析底層實現原理Java原始碼
- [底層原理]iOS中函式的型別編碼iOS函式型別
- 透過表層“效果”,築牢原始碼防洩密底層安全基石原始碼
- 淺析skynet底層框架下篇框架
- 如何閱讀框架原始碼框架原始碼