之前寫過一個緩存攔截器,主要在方法上添加CachingAspect特性之後,它的傳回值就可以被緩存下來,下次通路時直接從緩存中傳回結果,而它有一個前提,就是你的方法需要是一個接口方法,緩存這個CachingAspect卻需要在類裡定義,大叔感覺很怪,是以抽時間把它完善一下,讓緩存特性在接口方法裡定義。
今天說的是為類裡的虛方法添加CachingAspect,這個事實上我們用的比較多,因為并不是所有方法都需要提取到接口的,隻有那些可能有多态的情況才需要實作這種功能,是以大叔覺得有必要為類的虛方法添加一個緩存攔截的功能。
主要是建立一個新的類,然後讓它繼承被攔截的類型,找到聲明為virtual的方法,然後去override它,我們的攔截器使用了emit實作了建立類,建立方法等功能。
-》程式入口
-》 建立代理
-》建立新程式集
-》建立新子產品
-》建立新類
-》繼承被攔截的類
-》重寫virtual方法
-》添加緩存邏輯
-》傳回
使用它
緩存結果存儲到了redis中間件裡
修改了LindAspect的代碼段,對代理服務的完善,對類虛方法的支援!
對代理類也進行修改,添加了接口與類的判斷
下一步,大步将再次進行優化,争取早日支援接口方法攔截功能,而不是把攔截特性寫在類裡。
像下面的代碼,既然用了接口,就應該把特性寫在接口方法上,您說是吧!
感謝閱讀!
請關注大叔新寵LindAgile架構!