背景:
最近維護乙個老舊工程,遇到集團層面的資料安全改造,需要在dao層做加解密改造。而這個老舊工程的dao層是用的jdbctemplate實現的,儘管template方式實現起來可自由發揮的空間很大,但是因為跟其他其他服務的技術棧不統一,無法實現統一加解密,所以考慮把jdbctemplate公升級到mybatis。
過程:經過一番抓耳撓腮後,靈機一動想到了default方法(當初jdk團隊引進這個特性就是為了相容擴充套件已有介面),我們遇到的場景跟default方法的使用場景非常匹配,把 xxdaoimpl改成介面後,還可以把那一坨一坨的邏輯留在dao層,而且經過測試,default方法也是可以被**增強的,所以不會影響mybatis的interceptor,也不會影響統一的加解密安全改造。
(截圖裡還用到了mybatis-plus,mybatis的好cp,給他們打個硬廣:
至此:
目前公升級改造的技術方案已經驗證完畢,再說點感想吧:有時候自己想想,上面的方案有點點hack的精神,雖然通過技術解決問題是程式設計師最大的滿足和自豪,但是軟體、系統、專案等等終究是工程化的東西,按照正常的演進思路就是應該做重構,讓編碼更符合規範,也為以後的框架公升級留夠足夠的相容性。但是,作為網際網路專案,生命周期短以及朝不保夕是家常便飯的事情,而且一般都是以業務為驅動的,公司要的是爆發式的增長,對技術團隊的要求就是能快速響應,持續交付效能強大基本可靠的產品,而對於產品本身的規範性並沒有思考的太多,不像傳統的大型軟體專案,嚴格按照瀑布模型來工程化的演進。
JDK8的新特性
這兩天開始看jdk8的新特性,先看了lembda表示式和stream,就乙個感覺,優雅。趕緊將這兩天的成果總結一下 lembda表示式是乙個簡潔 可傳遞的匿名函式,實現了把 塊賦值給乙個變數的功能 格式就是 parameters expression,需要注意的是 引數可以為空 引數為乙個值得時候,...
jdk8的新特性
lambda表示式 格式為 符號左邊為表示式需要的所有引數 符號右邊為表示式要執行的功能 將之前的匿名內部內作為引數傳遞直接可以使用lambda表示式完成 比如lists new arraylist new arraylist stirng public int compare string a,s...
JDK 8 新特性 Stream map 相關
和 clojure 裡面的 map 理解 是一樣的,可以分別獲取流中的每乙個元素,然後在對其做一些操作 1.遍歷字串集合然後轉換成大寫字母 public static void main string args system.out.println newnames stream map 方式 ne...