容器+AOP實現動態部署(四)

? ?上篇咱們介紹了容器和AOP的結合,結合后怎樣將對象增強服務并沒有過多的說明,這里將詳細說明怎樣將對象 進行增強 ,達到一個一對多多對多的增強方式

先從簡單的方式說起

/**
*JDK代理類,實現動態調用對象方法
*/
public class JDKDynamicProxy implements InvocationHandler {  /***……省略方法*//***回調使用方法,運行選擇的方法*/ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  before();  Object result = method.invoke(target, args);  after();  return result;  }  private void before() {  System.out.println("Before");  }  private void after() {  System.out.println("After");  }  }

以上代碼轉為圖形為

?

我們將詳細的顆粒固定在 AOP中。這樣一來,若再想添加服務顆粒可得修改代碼,這不是一種非常好的解決方案。為了更好更好的將服務與AOP解耦,我們將服務咱們裝載到了一個服務容器中。

這樣就有了先前的版本號

?

?

基本是我們須要的。通過截取業務顆粒。將服務顆粒,關系集合一起傳遞到AOP中,AOP進行解析。若是有多個服務顆粒呢,于是我們有了變更版本號



將右側的服務顆粒放在了一個容器中,多個服務顆粒同一時候為一個業務對象服務。

若有多個服務顆粒,想要這寫服務同一時候為全部業務顆粒提供支持,就成了例如以下圖了

?

?1 首先通過構造函數將所須要的參數傳遞進來

	private Map<String, Object> aspectBeans; // 服務容器private Map<String, Object> businessBeans;// 業務容器private Map<String, Object> relationBeans;// 關系容器/**** * @param target*            被代理對象* @param aspectBeans*            切容器* @param businessBeans*            業務容器* @param relationBeans*            關系集合*/public JDKDynamicProxy(Object target, Map<String, Object> aspectBeans,Map<String, Object> businessBeans, Map<String, Object> relationBeans) {this.target = target;this.aspectBeans = aspectBeans;this.businessBeans = businessBeans;this.relationBeans = relationBeans;}


2 ?在回調函數中 調用解析關系xml方法。進行方法調用

?

	// 回調注冊切入對象方法@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {List beforeList = (List) relationBeans.get("aspectbefore");// 獲取關系容器中的關系invokeAspectName(beforeList, method, args);// 調用切面類中匹配方法Object result = method.invoke(target, args);// 調用 被代理類本身方法return result;}/*** * @Title: getAllMethod * @Description:  運行某個服務類中的全部方法,* @param @param clazz 服務類* @param @param aspectClass	aop關系集合中設定運行 攔截的方法* @param @param args 被攔截對象的參數* @return void    返回類型 * @throws*/public void getAllMethod(Class clazz, String aspectClass, Object[] args)throws IllegalAccessException, IllegalArgumentException,InvocationTargetException, NoSuchMethodException, SecurityException {// 獲取服務類中的全部公共方法Method[] methods = clazz.getDeclaredMethods();for (int j = 0; j < methods.length; j++) {// 反射獲取服務類中每一個方法名稱,獲取該服務類方法Method jinectmethod = clazz.getMethod(methods[j].getName(), Object.class);// 反射調用服務類中方法jinectmethod.invoke(aspectBeans.get(aspectClass),args == null ? new Object[1] : args);}}

?

?小結:

? 以上就是對AOP關系的基本解釋,一步步逐漸演變,也不是一蹴而就的。所以回到學習上,也不是一次學習就能夠全然的,要不斷重復的思考和總結。詳細的源代碼點擊連接

轉載于:https://www.cnblogs.com/blfshiye/p/5383295.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458093.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

caffe專題五——回歸中——檢測框架

https://blog.csdn.net/runner668/article/details/80436850

深入理解卷積層,全連接層的作用意義

有部分內容是轉載的知乎的&#xff0c;如有侵權&#xff0c;請告知&#xff0c;刪除便是&#xff0c;但由于是總結的&#xff0c;所以不一一列出原作者是who。 再次感謝&#xff0c;也希望給其他小白受益。 首先說明&#xff1a;可以不用全連接層的。 理解1&#xff1a; 卷…

用ionic快速開發hybird App(已附源碼,在下面+總結見解)

用ionic快速開發hybird App&#xff08;已附源碼,在下面總結見解&#xff09; 1.ionic簡介 ionic 是用于敏捷開發APP的解決方案。核心思路是&#xff1a;利用成熟的前端開發技術&#xff0c;來寫UI和業務邏輯。也就是說&#xff0c;就是一個H5網站&#xff0c;這個區別于react-…

為什么要使用工廠模式

工廠的作用相當于幫助我們完成實例化的操作。 優勢1&#xff1a;一般在代碼中&#xff0c;實例化一個類A是直接new A&#xff08;&#xff09;&#xff0c;假如類A是一個完全獨立的類&#xff0c;沒有相似類&#xff0c;則沒有必要使用工廠模式&#xff0c;直接new A&#xff…

css各兼容應該注意的問題

1.div布局在ie瀏覽器和chrome瀏覽器&#xff0c;firefox瀏覽器不同&#xff0c;不如在div里面嵌套3個div&#xff0c;分別左中右&#xff0c;左邊div的pading和margin在ie8以上都是幾乎相同&#xff0c;ie8以下做內邊距x2&#xff0c;在中間的div在chrome和fierfox中默認在左邊…

轉 C++宏定義詳解

來自&#xff1a;傳送門 C宏定義詳解 一、#define的基本用法 #define是C語言中提供的宏定義命令&#xff0c;其主要目的是為程序員在編程時提供一定的方便&#xff0c;并能在一定程度上提高程序的運行效率&#xff0c;但學生在學習時往往不能 理解該命令的本質&#xff0c;總是…

acm之vim的基本配置

http://www.kuangbin.net/archives/vim-acmicpc 轉載于:https://www.cnblogs.com/akrusher/articles/5402426.html

40 個重要的 HTML5 面試問題及答案

2019獨角獸企業重金招聘Python工程師標準>>> 介紹 我是一個ASP.NET MVC開發人員。最近當我找工作的時候&#xff0c;我發現很多問題都是圍繞HTML 5和它的新功能展開的。所以&#xff0c;下面我將列出40個有助于你提高相關HTML 5知識的重要問題。 這些問題并不能保證…

Java常見Jar包的用途

jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用來發現、查找和實現可插入式接口&#xff0c;提供一些一般類實例化、單件的生命周期管理的常用方法. jaxrpc.jar Axis運行所需要的組件包 saaj.jar 創建到端點的點到點連接的方法、創建并處理SOAP消息和附件的方法…

車流檢測之halcon光流法算法實現

* This example program shows how to use optical_flow_mg to compute the optical flow in an image sequence and how to segment the optical flow. *這個示例程序顯示了如何使用._flow_mg來計算圖像序列中的光流&#xff0c;以及如何分割光流。 dev_update_off () dev_…

利用光學流跟蹤關鍵點---30

原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/ 關鍵點&#xff1a;是多個方向上亮度變化強的區域。 opencv:版本是2.4. 光學流函數&#xff1a;calcOpticalFlowPyrLK()。&#xff08;關鍵點偵測器使用goodFeaturesToTrack()&#xff09;二者結合。 相應的啟動文…

基于Redis、Storm的實時數據查詢實踐

通過算法小組給出的聚合文件&#xff0c;我們需要實現一種業務場景&#xff0c;通過用戶的消費地點的商戶ID與posId&#xff0c;查詢出他所在的商圈&#xff0c;并通過商圈地點查詢出與該區域的做活動的商戶&#xff0c;并與之進行消息匹配&#xff0c;推送相應活動信息到用戶手…

從離散值中把值相近的放在一起

//30根細條得到30個長度值&#xff0c;選擇出現值相近且出現次數最多的&#xff0c;算其均值作為輸出 #include <iostream> using namespace std;int main() {double dRawdata[5] {1.1,1.2,1.3,2.5,3.2};//先升序排序double dSort[5][5] {0};double* p dRawdata;int a…

register_globals(全局變量注冊開關)

register_globals&#xff0c;是php.ini文件里面的一個配置選項&#xff0c;接下來&#xff0c;我們可以通過例程來分析一下&#xff0c;當register_globals on 與 register_globals off 的時候&#xff0c;對php語言的一些安全影響。測試源代碼如下&#xff1a;index.html 源…

精述IBM的MQTT協議和MQTT-S協議

一&#xff0e;MQTT簡介 MQTT (Message Queuing Telemetry Transport) 是由IBM研發的構建在TCP/IP之上的簡單輕量的消息協議&#xff0c;目標使用場景為受限制環境&#xff0c;如低帶寬、高延遲、不可靠網絡&#xff0c;很適用于M2M和IoT中。它的競爭協議包括XMPP協議和IETF的C…

20150103--SQL連接查詢+視圖-02

20150103--SQL連接查詢視圖-02 子查詢 一條查詢語句出現在另外一條查詢語句的內部&#xff0c;這條語句就被稱之為子查詢語句。 子查詢分類 子查詢可以根據子查詢返回的結果以及子查詢出現的位置兩種方式進行分類 按結果分類&#xff1a; 標量子查詢&#xff1a;子查詢返回的結…

QtQuick controls和controls2 自定義樣式

2019獨角獸企業重金招聘Python工程師標準>>> controls import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Rectangle {color: "green"Button {id:buttontext: qsTr("Second page")anchors.centerIn: parentpr…

電腦開機3秒就重啟循環_電腦修好后客戶不愿支付上門費,行,那電腦開機60秒自動關機吧!...

上門維修電腦已經非常普及了&#xff0c;上門維修電腦費用要比送修(送到維修店)費用高&#xff0c;送修電腦只有一項維修費用&#xff0c;上門維修電腦比送修多了一項費用&#xff0c;這項費用就是上門費。有人說維修電腦收取上門費用不合理&#xff0c;其實這樣的說法非常自私…

jQuery屬性篩選選擇器

2019獨角獸企業重金招聘Python工程師標準>>> 代碼一 <h2>屬性篩選選擇器</h2><h3>[attval]、[att]、[att|val]、[att~val]</h3><div class"left" testattr"true" ><div class"div" testattr"t…