在上篇部落格中個,咱們一起組建了乙個容器,裡面封裝了業務,這樣,咱們就將業務和服務的組裝放到了客戶端,而客戶端就相當於咱們的開發中使用到的配置檔案,大家發現問題了嗎?就是我不能動態改動了?業務容器在**完成後,重新新增乙個業務類,這時候,是不被允許的,那這個容器就是個編譯時起作用的容器,他就喪失了很多的靈活性! 那怎麼辦呢?實際就是調換一下呼叫順序就好,大家看看結果:
改造後的類圖
// 獲取cglib**工廠類
public static cglibdynamicproxy getinstance()
/*** 使用**工廠生成某個類的**
* * @param cls
* 要**的類
* @return 返回已經**好的類
*/@suppresswarnings("unchecked")
public t getproxy(classcls)
// 重寫被**物件的方法執行
// 所有的方法執行,到反射的級別都是invoke,重寫了這個方法,就重寫了所有的方法執行,實現了**
@override
public object intercept(object target, method method, object args,
methodproxy proxy) throws throwable
// 服務容器的get方法
public iproxymethods getproxymehds()
// 服務容器的set方法
public void setproxymehds(iproxymethods proxymehds)
}
public class domehds implements idomehds
// 獲取業務map
public hashmapgetdobeans()
// 設定業務map
public void setdobeans(hashmapdobeans)
// 獲取**類
public cglibdynamicproxy getproxy()
// 設定**類
public void setproxy(cglibdynamicproxy proxy)
}
public class client
}
aspectclasstwo saytwo ...
hello! jack
aspectclassfour sayfour ...
aspectclassthree saythree ...
aspectclassone sayone ...
aspectclasstwo saytwo ...
eat eating ...
aspectclassfour sayfour ...
aspectclassthree saythree ...
aspectclassone sayone ...
aspectclasstwo saytwo ...
a ...
aspectclassfour sayfour ...
aspectclassthree saythree ...
2.5 原文部落格位址
AOP解密 深入再造AOP
在上篇部落格中,大家和我一起研究了aop的基本實現,但是,也給大家遺留了很多問題,在這篇部落格,咱們一起研究如何針對這些問題進行持續的優化,看看在咱們的手裡,aop會成長為乙個什麼樣的東西!看看上篇部落格中,咱們一起實現的aop類圖 咱們看看在cglib類裡的問題 public class cgli...
AOP之動態化
目前的aop aspect oriented programming 技術雖然以動態 織入為核心,但是這種織入仍然是一次性的。一般在系統構造的時候 例如classloader裝載class的時候 實現類和成員函式的增強。此後在執行時刻 結構是固定的而不再發生變化。但是在真正的業務處理過程中,我們在不...
AOP解密加密介面要點記錄
專案背景 需要對專案的前後端進行加密傳輸,後台統一處理,此時我們經常會用到spring的aop,方便快捷,以下為書寫過程中的記錄以及總結。專案環境 springboot 說明 前台加解密,以及後台加解密過程忽略,各位大佬根據自己專案書寫即可。主要業務 如下 pointcut annotation c...