集合大家基本都有個認識吧,
如: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的思想,想到了基於註解的...