容器 AOP 實現動態部署(一)

2021-07-02 22:18:37 字數 1639 閱讀 5614

集合大家基本都有個認識吧,

如:jdk

中的list

,set

,map

等,都是很好的集合

。容器和集合有什麼不同呢,我個人認為:

容器應提供公共的服務

容器中的服務可以操作容器中所有物件

容器中選擇某個物件可以操作物件的屬性和方法

詳情請看下圖

空白處右鍵

容器出現容器

提供的服務,

容器物件右鍵出現物件的屬性或方法

。最形象的就是

我們wind

的資源管理器的模型。

有了容器的基本概念後,再看看看我們最普通的開發方式

。乙個系統開發業務顆粒,

免不了要有

日誌,事務一些的參雜。最普通的寫法我們是怎麼做的呢

常見方式

多個地方包含相同**的軟體

以上寫法相信大家已經發現不足之處了。若要修改,則需要開啟

3各地方進行修改,不能做到一處修改。

為了解決這個問題,我們通常會採用將如圖

1 所示的

相同**部分定義成乙個方法,然後在 3個**段中分別呼叫該方法即可。在這種方式下,軟體系統的結構如圖 2 所示。

物件引用形式

這種方法基本可以這樣做能夠解決大部分應用場景。但是還是沒有脫離了對封裝物件的依賴。

aop方式

這時候aop的一種思想可以解決該問題

通常的aop這樣寫

若是再來乙個切面顆粒,**首先是要修改的,其次還要進行相關配置,

還是有影響的

經過一些修改和設計,我們將

aop 

與切面顆粒進行隔離,這樣就可以達到

切面顆粒可以隨時的增刪,aop

只進行相關的一些配置,**無需修改,這樣達到了熱部署的效果,效果圖如下3

最左邊為業務容器,

右邊為切入顆粒容器

,中間為

aop集合,存放的是

業務域切面容器的切入關係

.若要增加切面顆粒,只要將切面顆粒配置到切面容器中。

在aop

集合中進行相關配置,或缺省配置即可達到

切入效果。

對於這塊的

容器和aop

組合的效果,是經過了多次的設計和修改,形成最終版本,使用乙個

aop容器

管理了多個切面顆粒,為多個業務顆粒進行增強。

動態織入的AOP實現

動態織入的aop實現,有兩種方法 第一類,借助於remoting命名空間下的幾個類,通過獲取當前上下文及反射的機制來實現,這需要被aop的類需要繼承自arshalbyrefobject或者contextboundobject 第二類,原理是基於動態 的思想,即在執行時動態構造乙個原有類的子類,這樣就...

Flask容器化部署原理與實現

在開發時,我們使用flask run命令啟動的開發伺服器是werkzeug提供的,但是這種方式目的是為了開發,不能很好的擴充套件,不適合生產部署。生產部署,我們需要乙個更強健,效能更高的wsgi伺服器 關於wsgi,可參考wsgi到底是什麼 常用的伺服器有 uwsgi gunicorn等,本文以uw...

Vue動態路由的後端實現(基於AOP的思路)

最近開發的乙個專案,涉及到這樣乙個需求 隨著專案的不斷推進,後台管理功能逐漸增多,與此同時,靜態路由表也逐漸擴大,需要把靜態路由方式轉換為動態路由方式。要完成這樣乙個轉換,有幾個技術要點需要解決,其中乙個就是後端的實現方式。那麼,後端如何實現,對後端的侵入性最小呢?基於aop的思想,想到了基於註解的...