最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring AOP 攔截器的基本實現(xiàn)

 更新時間:2017年03月02日 15:03:52   作者:Mafly  
本篇文章主要介紹了詳解Spring AOP 攔截器的基本實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一個程序猿在夢中解決的 Bug

沒有人是不做夢的,在所有夢的排行中,白日夢最令人傷感。不知道身為程序猿的大家,有沒有睡了一覺,然后在夢中把睡之前代碼中怎么也搞不定的 Bug 給解決的經(jīng)歷?反正我是有過。

什么是 AOP ?

AOP 為 Aspect Oriented Programming 的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術。AOP 是 OOP 的延續(xù),是軟件開發(fā)中的一個熱點,也是 Spring 框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用 AOP 可以對業(yè)務邏輯的各個部分進行隔離,從而使得業(yè)務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。

翻譯為人能聽懂的話來說就是: AOP 可以理解為在方法執(zhí)行前后可以去完成相同的業(yè)務邏輯,而不需要你去改業(yè)務代碼。舉個例子吧:現(xiàn)在有一個需求,要在項目中的每一個方法前面都輸出一句:開始執(zhí)行啦! 需求很明確了,常規(guī)的解決方式就是在每個具體的方法最前面加一句system.out.print("開始執(zhí)行啦!");,冒出這個想法的程序員是普通程序猿,當然,這是開個玩笑啦!這樣的代碼,如果一兩個方法用這樣的方式?jīng)]有任何問題完全可行,如果幾十個、幾百個這樣的方法呢?

這時候,我們就可以使用 AOP 來完成以上邏輯了,不需要改動任何一個方法,無侵入的方式來完成這個需求。

AOP 在實際項目中運用的場景主要有權限管理(Authority Management)、事務管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和調(diào)試管理(Debugging)等。就是這些與業(yè)務邏輯不是很關聯(lián)密切的公共方法,我們就可以使用AOP。

Spring AOP 和 MVC 攔截器 又是什么?

通過上面的解釋,我是知道了,AOP 其實就是可以算一種設計模式,或者說一種編程思想,而 Spring AOP 就是 Spring框架 對 AOP 這種思想進行了一系列技術實現(xiàn)和封裝,讓我們只需要配置一下就可以達到這個模式,在配置文件中使用<aop:config>元素。那MVC 攔截器又是什么鬼呢?可以理解為是 Spring MVC 框架對 AOP 的一種實現(xiàn)方式,在配置文件中使用<mvc:interceptors>元素進行配置。這兩種方式就是實現(xiàn)了 AOP 的編程思想,我們只需要進行一定的配置就可以了?,F(xiàn)在好多人也都把 Spring AOP 和 MVC 攔截器看成是一種相同的方式,都叫攔截器或AOP。

開始擼一下代碼

1.新建一個TestInterceptor類繼承于HandlerInterceptorAdapter

具體代碼:

package cn.mayongfa.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class TestInterceptor extends HandlerInterceptorAdapter {
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      // 請求處理完成之后
      System.out.println("請求處理完成啦!");
      super.afterCompletion(request, response, handler, ex);
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      // 處理器執(zhí)行完畢之后
      System.out.println("處理器執(zhí)行完畢啦!");
      super.postHandle(request, response, handler, modelAndView);
  }

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      // 處理器實際執(zhí)行之前
      System.out.println("處理器執(zhí)行之前!");
      return super.preHandle(request, response, handler);
  }
}
  • preHandle(..):它在處理器實際執(zhí)行 之前 會被執(zhí)行;
  • postHandle(..),它在處理器執(zhí)行 完畢 以后被執(zhí)行;
  • afterCompletion(..),它在 整個請求處理完成 之后被執(zhí)行。

這三個方法為各種類型的前處理和后處理需求提供了足夠的靈活性。

2.配置一下/WebContent/WEB-INF/springMVC-servlet.xml中的<mvc:interceptors>元素就可以攔截請求了。

<mvc:interceptors>
  <!-- 直接定義在mvc:interceptors根下面的Interceptor將攔截所有的請求 -->
  <mvc:interceptor>
    <!-- 定義在mvc:interceptor下面的表示是對特定的請求才進行攔截的 -->
    <mvc:mapping path="/api/**"/>
    <bean class="cn.mayongfa.interceptor.TestInterceptor">
    </bean>
  </mvc:interceptor>
</mvc:interceptors>

當然,你可以根據(jù)你的需求進行攔截,我這里攔截的是api路徑下面的所有請求。

3.測試一下

我的項目中有個 /api/user/getlist 請求,在瀏覽器輸入試一下。

請求數(shù)據(jù)成功,看一下控制臺輸出:

看到我們在TestInterceptor類中輸出已經(jīng)打印出來,這就是Spring AOP 攔截器的基本實現(xiàn)。到這里,你應該明白了如何使用 AOP 來進行一些與業(yè)務邏輯無關且必須在代碼前后執(zhí)行的一些通用方法了,這就是我理解 AOP 的作用吧。

下載地址:SpringDemo_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • IDEA報錯:java?找不到符號圖文解決過程

    IDEA報錯:java?找不到符號圖文解決過程

    這篇文章主要給大家介紹了關于IDEA報錯:java?找不到符號解決的相關資料,運行項目時Idea報錯,提示找不到符號,但是這個類在項目里是存在的,網(wǎng)上找了很多文章都沒解決,浪費了一個下午終于弄好了,記錄一下,需要的朋友可以參考下
    2023-08-08
  • Java實現(xiàn)一鍵獲取Mysql所有表字段設計和建表語句的工具類

    Java實現(xiàn)一鍵獲取Mysql所有表字段設計和建表語句的工具類

    這篇文章主要為大家詳細介紹了如何利用Java編寫一個工具類,可以實現(xiàn)一鍵獲取Mysql所有表字段設計和建表語句,感興趣的小伙伴可以了解一下
    2023-05-05
  • SWT(JFace)體驗之ViewForm的使用

    SWT(JFace)體驗之ViewForm的使用

    SWT(JFace)體驗之ViewForm的使用
    2009-06-06
  • elasticsearch kibana簡單查詢講解

    elasticsearch kibana簡單查詢講解

    今天小編就為大家分享一篇關于elasticsearch kibana簡單查詢講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java中的String.valueOf()和toString()方法區(qū)別小結

    Java中的String.valueOf()和toString()方法區(qū)別小結

    字符串操作是開發(fā)者日常編程任務中不可或缺的一部分,轉(zhuǎn)換為字符串是一種常見需求,其中最常見的就是String.valueOf()和toString()方法,本文主要介紹了Java中的String.valueOf()和toString()方法區(qū)別小結,感興趣的可以了解一下
    2025-04-04
  • springboot druid數(shù)據(jù)庫配置密碼加密的實現(xiàn)

    springboot druid數(shù)據(jù)庫配置密碼加密的實現(xiàn)

    Druid是阿里開發(fā)的數(shù)據(jù)庫連接池,本文主要介紹了springboot druid數(shù)據(jù)庫配置密碼加密的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java線程池流程編排運用實戰(zhàn)源碼

    Java線程池流程編排運用實戰(zhàn)源碼

    這篇文章主要介紹了Java線程池流程編排運用實戰(zhàn)源碼,就在流程引擎的基礎上運用?ThreadPoolExecutor,使用線程池實現(xiàn)?SpringBean?的異步執(zhí)行
    2022-03-03
  • Java?Autowired注解深入分析

    Java?Autowired注解深入分析

    @Autowired注解是Spring中非常重要且常見的,接下來就簡要的介紹一下它的用法。@Autowired默認是通過set方法,按照類型自動裝配JavaBean,set方法可省略不寫,它主要是修飾在成員變量上
    2023-01-01
  • 簡單講解Java的Socket網(wǎng)絡編程的多播與廣播實現(xiàn)

    簡單講解Java的Socket網(wǎng)絡編程的多播與廣播實現(xiàn)

    這篇文章主要介紹了Java的Socket網(wǎng)絡編程的多播與廣播實現(xiàn),包括網(wǎng)絡編程發(fā)送和接受數(shù)據(jù)的一些基礎知識整理,需要的朋友可以參考下
    2016-01-01
  • SpringBoot快速過濾出一次請求的所有日志的示例代碼

    SpringBoot快速過濾出一次請求的所有日志的示例代碼

    在現(xiàn)網(wǎng)出現(xiàn)故障時,我們經(jīng)常需要獲取一次請求流程里的所有日志進行定位,本文給大家介紹了SpringBoot如何快速過濾出一次請求的所有日志,文中有相關的代碼和示例供大家參考,需要的朋友可以參考下
    2024-03-03

最新評論

同心县| 昂仁县| 沙湾县| 海南省| 桐城市| 义乌市| 工布江达县| 泗水县| 东安县| 仪陇县| 冀州市| 林甸县| 武强县| 沾益县| 城市| 望都县| 凌海市| 临江市| 屏南县| 丹东市| 宝鸡市| 三穗县| 文山县| 北宁市| 陆良县| 孙吴县| 宽城| 祁连县| 屏山县| 桓台县| 额济纳旗| 葵青区| 郎溪县| 大同市| 郸城县| 苗栗县| 茶陵县| 民丰县| 宁都县| SHOW| 永修县|