激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java 實現攔截器Interceptor的攔截功能方式

Java 實現攔截器Interceptor的攔截功能方式

2022-03-07 00:46CG國斌 Java教程

這篇文章主要介紹了Java 實現攔截器Interceptor的攔截功能方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java 里的攔截器是動態攔截 action 調用的對象,它提供了一種機制可以使開發者可以定義在一個 action 執行的前后執行的代碼,也可以在一個 action 執行前阻止其執行,同時也提供了一種可以提取 action 中可重用部分的方式。在 AOP(Aspect-Oriented Programming)中攔截器用于在某個方法或字段被訪問之前進行攔截,然后在之前或之后加入某些操作。

此外,攔截器在流行的開源框架中也很常見,其依賴的技術就是 Java 的動態代理。理解攔截器的核心原理對理解這些開源框架的體系結構至關重要。下面,我們就以一個簡單的模型的來說明攔截器實現的一般方法。

模型主要分為五個模塊,分別:

  • 業務組件,被代理和被攔截的對象;
  • 代理處理器,實現了InvocationHandler接口的一個對象;
  • 代理對象,Proxy對象;
  • 攔截器,普通的 Java Bean,在調用業務方法之前或者之后會自動攔截并執行自己的一些方法;
  • 客戶端,執行業務處理的入口。

接下來,我們就用 Java 語言來實現攔截器Interceptor的攔截功能:

第1步:創建業務組件接口 BusinessFacade

?
1
2
3
4
5
6
7
8
9
10
11
/**
 * @author 維C果糖
 * @create 2017-03-30
 *
 * GitHub:github.com/guobinhit
 *
 * 業務組件接口
 */
public interface BusinessFacade {
    public void doSomething();
}

第2步:創建業務組件實現類 BusinessClass

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * @author 維C果糖
 * @create 2017-03-30
 *
 * GitHub:github.com/guobinhit
 *
 * 業務組件接口的實現類
 */
public class BusinessClass implements BusinessFacade {
    public void doSomething() {
        System.out.println("在業務組件 BusinessClass 中調用方法: doSomething()");
    }
}

第3步:創建攔截器 InterceptorClass

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * @author 維C果糖
 * @create 2017-03-30
 *
 * GitHub:github.com/guobinhit
 *
 * 攔截器
 */
public class InterceptorClass {
    // 在 action 之前調用
    public void before(){
        System.out.println("在攔截器 InterceptorClass 中調用方法: before()");
    }
    // 在 action 之后調用
    public void after(){
        System.out.println("在攔截器 InterceptorClass 中調用方法: after()");
    }
}

第4步:創建動態代理處理器工具 DynamicProxyHandler

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * @author 維C果糖
 * @create 2017-03-30
 *
 * GitHub:github.com/guobinhit
 *
 * 動態代理處理器工具
 */
public class DynamicProxyHandler implements InvocationHandler {
    // 聲明被代理對象
    private Object business;
    // 創建攔截器
    private InterceptorClass interceptor = new InterceptorClass();
    /**
   * 動態生成一個代理類對象,并綁定被代理類和代理處理器。
   *
   * @param business
   * @return 代理類對象
   */
    public Object bind(Object business) {
        this.business = business;
        /**
         * Proxy.newProxyInstance(參數1, 參數2, 參數3)
         *
         * 參數1, 表示被代理類的 ClassLoader
         * 參數2, 表示被代理的接口
         * 參數3, 表示代理處理器對象
         *
         * 該方法,返回代理實例
         */
        return Proxy.newProxyInstance(business.getClass().getClassLoader(),
                business.getClass().getInterfaces(),
                this);
    }
    /**
   * 代理需要調用的方法,并在該方法調用前后,先調用連接器的方法。
   *
   * @param proxy 代理類對象
   * @param method 被代理的接口方法
   * @param args 被代理接口方法的參數
   * @return 方法調用返回的結果
   * @throws Throwable
   */
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
       Object result = null;
       interceptor.before();
       result = method.invoke(business, args);
       interceptor.after();
       return null;
   }
}

第5步:創建客戶端 ClientDemo

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * @author 維C果糖
 * @create 2017-03-30
 *
 * GitHub:github.com/guobinhit
 *
 * 客戶端
 */
public class ClientDemo {
    public static void main(String args[]) {
        // 創建動態代理處理工具
        DynamicProxyHandler handler = new DynamicProxyHandler();
        // 創建業務組件對象
        BusinessFacade business = new BusinessClass();
        // 創建業務組件對象,并用動態代理綁定代理類
        BusinessFacade businessProxy = (BusinessFacade) handler.bind(business);
        // 調用業務組件中的方法,演示攔截器效果
        businessProxy.doSomething();
    }
}

運行上面的項目代碼,結果如下圖所示:

Java 實現攔截器Interceptor的攔截功能方式

如上圖所示,顯然我們攔截器的攔截功能實現啦!

通過這篇文章,我們可能會對攔截器的實現原理有一個更透徹的理解。

But,在真正的項目實踐之中,要想實現攔截器的功能,我們一般采用繼承類HandlerInterceptorAdapter或者抽象類AbstractInterceptor,或者實現HandleInterceptor接口。

也就是說,我們只需要關心如何重寫方法,而不需要關心其內部的實現原理。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_35246620/article/details/68484407

延伸 · 閱讀

精彩推薦
591
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 成年免费在线视频 | 黄色大片在线免费观看 | 成人在线视频在线观看 | 久久久久久久久久综合 | 一区二区三区欧美在线观看 | 色综合欧美 | 精品二区在线观看 | 我爱我色成人网 | 99热1| 99久久九九爱看免费直播 | 伊人久久电影网 | 国产色爱综合网 | 越南一级黄色片 | 亚洲男人天堂 | 中文字幕欧美视频 | 欧美特级一级毛片 | 啪啪激情| 亚洲人成网站免费播放 | 欧美精品一级 | 72pao成人国产永久免费视频 | 99国产精品国产免费观看 | 一级裸体视频 | 久久久久久久黄色片 | 成人午夜视频免费 | 午夜视频在线免费观看 | 性爱视频免费 | av在线不卡免费 | 一级黄色片武则天 | 黄色免费大片 | 久久久久久免费 | 九九热在线视频观看 | 久久久青 | arabxxxxvideos| 久久久久久麻豆 | 一级免费黄色 | 正在播放91精 | 精品国产91久久久久久久 | 男女无套免费视频 | 日韩.www| 媚药按摩痉挛w中文字幕 | 特级西西444www大精品视频免费看 |