国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何使用動態代理實現AOP功能

2019-11-18 12:25:00
字體:
來源:轉載
供稿:網友

    一、使用的背景(也不能算是使用的背景,最多只能算是一個在什么條件下面我想到了使用動態代理實現AOP的攔截功能):

    因為在項目中程序的結構是使用SOAP調用JNI,因此在SOAP服務端里面沒有任何實現代碼,僅僅是new一個JNI的對象,然后調用JNI對應的方法。但是在調用JNI方法之前需要對傳進JNI的javaBean進行初始化,而且還需要記錄日志。而SOAP服務端的代碼是通過ant自動生成的,需要對他進行手工的修改,在修改過程中發現每一個方法里面都是相同的:記錄進入方法的日志、初始化JavaBean和記錄退出方法的日志,這寫東西都是通過拷貝粘貼來完成的,想到假如以后再加一個什么功能的時候又得每一個方法進行拷貝粘貼,而且方法的數量還不少,所以覺得這樣來實現是不科學的。示例代碼如下:

public class SOAP{
       PRivate JniInterface jni = null;
       private Log log = 。。。;
       public SOAP(){
              jni=new JniClass();
       }

       /**方法A**/
       public JavaBeanA aMethod(JavaBeanA javaBeanA){
                log.debug("進入A方法");
                //初始化JavaBean
                Init(javaBeanA);
                //調用JNI對應的方法
                JavaBeanA result = jni.aMethod(javaBeanA);
                log.debug("退出A方法");
                return result;
      }
      ……………………………………
      ……………………………………
      等等,很多這樣的方法
      ……………………………………
      ……………………………………
}

    從示例代碼里面可以看出,除了調用JNI對應的方法不同之外,其他的都是相同的代碼,把所有的東西進行拷貝復制是不合理的。每當對SOAP進行修改,就必須將所有的方法重新拷貝粘貼。為了省去拷貝粘貼這一工序,所以使用動態代理實現AOP攔截共能。

    二、實現AOP攔截

    1.    定義Interceptor接口

public interface Interceptor {
   //在調用之前調用該方法
    public void before(InvokeJniInfo invInfo);
   //在調用之后調用該方法
    public void after(InvokeJniInfo invInfo);
   //出現異常之后調用該方法
    public void exceptionThrow(InvokeJniInfo invInfo);
}

    2.  定義 InvokeJniInfo 類
   
在Interceptor接口中的InvokeJniInfo類,該類的定義如下:
public class InvokeJniInfo {
    //被代理的對象
    Object proxy;
   //被調用的方法
    Method method;
   //被調用方法的參數列表
    Object[] args;
   //調用之后的結果
    Object result;
   //拋出的異常
    Throwable exception;



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽阳市| 驻马店市| 新宁县| 南木林县| 呼伦贝尔市| 墨玉县| 鹿邑县| 光山县| 天长市| 讷河市| 资阳市| 江华| 额济纳旗| 黄石市| 读书| 昌都县| 江孜县| 普宁市| 长垣县| 郑州市| 建平县| 油尖旺区| 原阳县| 年辖:市辖区| 双柏县| 宁海县| 德阳市| 澎湖县| 安国市| 静乐县| 墨玉县| 宁远县| 泌阳县| 阳高县| 深水埗区| 中宁县| 连城县| 清徐县| 平度市| 昭觉县| 泰安市|