java架構解密 雙容器優化aop

2021-07-03 11:28:27 字數 2410 閱讀 6680

上篇部落格中,提出,優化是個無止境的過程,的確,隨著需求的變化,軟硬體基礎的公升級,我們越來越不考慮**的容量,而是考慮**的質量,但是隨著研究的深入,到了某個階段,我們也要考慮**的容量問題,這時,容器的概念,脫穎而出,在上篇部落格將服務類作為乙個介面傳入,實際在後台是乙個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...