上篇部落格中,提出,優化是個無止境的過程,的確,隨著需求的變化,軟硬體基礎的公升級,我們越來越不考慮**的容量,而是考慮**的質量,但是隨著研究的深入,到了某個階段,我們也要考慮**的容量問題,這時,容器的概念,脫穎而出,在上篇部落格將服務類作為乙個介面傳入,實際在後台是乙個map容器,我們不僅包含了map的全部實現,還實現了服務類的疊加,但是美中不足的是,我們的業務類,還是單個的物件,就如下圖:
這時,我們如果想為更多的業務提供服務,就必須編寫更多的aop,這不符合我們的原則,基於這一點,我做了以下的調整,大家先看類圖:
我們將業務類做成了容器,然後**類持有這個容器,這個容器的所有子元素,通過遍歷,就都擁有了服務類的所有方法:
/**
* 業務類容器:
* 用map盛放要切入服務的業務類
* * @author 許恕
* @version 3.0.0 , 2023年6月16日 下午4:41:28
*/public class domehds implements idomehds
//設定業務map
public void setdobeans(hashmapdobeans)
}
/**
* 打招呼動態**類,給業務類新增功能
* 前一版本為jdk**實現
* 本次新增執行方法之前列印到控制台『befor』
* 本次新增執行方法之後列印到控制台『after』
*本次版本為dglib**
* 換**類原因,jdk**要求被**類必須實現某介面,因為它底層實現是新建乙個類,實現和被**類相同的介面
* 用**類新建的業務類代替原業務類
* cglib**是新建乙個類,繼承自被**類,用新建的**類替換掉原業務類,就不需要介面了
* *5.0版本增加服務組裝容器,將服務從**類中抽離出去了,我們的**類成為了乙個bean
*6.0將服務容器定義為介面
*7.0增加業務容器
* @author 許恕
* @version 3.0.0 , 2023年6月16日 下午3:20:13
*/public class cglibdynamicproxy implements methodinterceptor
//獲取cglib**工廠類
public static cglibdynamicproxy getinstance()
/*** 使用**工廠生成某個類的**
** @param cls 要**的類
* @return 返回已經**好的類
*/@suppresswarnings("unchecked")
public t getproxy(classcls)
//獲取業務容器
private void getproxytodomap()
}//重寫被**物件的方法執行
//所有的方法執行,到反射的級別都是invoke,重寫了這個方法,就重寫了所有的方法執行,實現了**
@override
public object intercept(object target, method method, object args, methodproxy proxy) throws throwable
//服務容器的get方法
public iproxymehds getproxymehds()
//服務容器的set方法
public void setproxymehds(iproxymehds proxymehds)
//業務容器get方法
public domehds getdomehds()
//業務容器set方法
public void setdomehds(domehds domehds)
}
任何事物,都是有個誕生發展的過程,人類至今發明的東西,都是來自於人類自己的生活,在學習的過程中,想象生活,我們有時候,就會豁然開朗,舉個例子:
小明要有個快遞要給小李郵過去,小明找到郵遞員,簽字完成,過了3天小李收到了,郵遞的過程就好像咱們的aop一般,對使用者來說是透明的,拆箱和裝箱的過程,交給各自自己負責就好,這不就是物件導向嗎!
當然,優化如此就完美了嗎?當然沒有,下篇部落格,咱們繼續對aop做深入的了解和優化!
java架構解密 用介面改造AOP
優化是個無止境的工作,在aop的路上,我們走得很遠,但是還有很多的工作,我們沒有做,比如,將aop的業務部分封裝成容器,將aop的服務部分改造成面向介面的,這樣就不受具體的形式上的限制了!這樣aop的優化,就又前進了一步,也是符合咱們的面向介面程式設計的思想,下面就和我一起研究下如何將介面的思想融入...
Java 雙鏈表
鍊錶 如果想要儲存多個物件,首先想到的就是物件陣列,如果要儲存任意物件,可以用object型別的陣列,但是陣列的長度固定,開闢小了不夠用,開闢大了浪費記憶體,所以我們可以用鍊錶來儲存多個物件。鍊錶有單鏈表和雙鏈表,雙鏈表優化了對前置節點的訪問和隨機訪問。比如我們要在單鏈表中查乙個資料,那麼我們需要從...
Java加密跟解密
具體事項請直接看 public static final string key md5 md5 public static byte encryp 5 byte input throws exception public static string encryp 5bybase64 byte inp...