一個程序猿在夢中解決的 Bug
創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計,營銷型網(wǎng)站到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價值,為企業(yè)制作有用的創(chuàng)意設(shè)計體驗。核心團隊擁有超過十年以上行業(yè)經(jīng)驗,涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)雅安服務(wù)器托管、成都App制作、手機移動建站、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)整合營銷。
沒有人是不做夢的,在所有夢的排行中,白日夢最令人傷感。不知道身為程序猿的大家,有沒有睡了一覺,然后在夢中把睡之前代碼中怎么也搞不定的 Bug 給解決的經(jīng)歷?反正我是有過。
什么是 AOP ?
AOP 為 Aspect Oriented Programming 的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。AOP 是 OOP 的延續(xù),是軟件開發(fā)中的一個熱點,也是 Spring 框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用 AOP 可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
翻譯為人能聽懂的話來說就是: AOP 可以理解為在方法執(zhí)行前后可以去完成相同的業(yè)務(wù)邏輯,而不需要你去改業(yè)務(wù)代碼。舉個例子吧:現(xiàn)在有一個需求,要在項目中的每一個方法前面都輸出一句:開始執(zhí)行啦! 需求很明確了,常規(guī)的解決方式就是在每個具體的方法最前面加一句system.out.print("開始執(zhí)行啦!");
,冒出這個想法的程序員是普通程序猿,當(dāng)然,這是開個玩笑啦!這樣的代碼,如果一兩個方法用這樣的方式?jīng)]有任何問題完全可行,如果幾十個、幾百個這樣的方法呢?
這時候,我們就可以使用 AOP 來完成以上邏輯了,不需要改動任何一個方法,無侵入的方式來完成這個需求。
AOP 在實際項目中運用的場景主要有權(quán)限管理(Authority Management)、事務(wù)管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和調(diào)試管理(Debugging)等。就是這些與業(yè)務(wù)邏輯不是很關(guān)聯(lián)密切的公共方法,我們就可以使用AOP。
Spring AOP 和 MVC 攔截器 又是什么?
通過上面的解釋,我是知道了,AOP 其實就是可以算一種設(shè)計模式,或者說一種編程思想,而 Spring AOP 就是 Spring框架 對 AOP 這種思想進行了一系列技術(shù)實現(xiàn)和封裝,讓我們只需要配置一下就可以達到這個模式,在配置文件中使用<aop:config>
元素。那MVC 攔截器
又是什么鬼呢?可以理解為是 Spring MVC 框架對 AOP 的一種實現(xiàn)方式,在配置文件中使用<mvc:interceptors>
元素進行配置。這兩種方式就是實現(xiàn)了 AOP 的編程思想,我們只需要進行一定的配置就可以了。現(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); } }
這三個方法為各種類型的前處理和后處理需求提供了足夠的靈活性。
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>
當(dāng)然,你可以根據(jù)你的需求進行攔截,我這里攔截的是api路徑下面的所有請求。
3.測試一下
我的項目中有個 /api/user/getlist
請求,在瀏覽器輸入試一下。
請求數(shù)據(jù)成功,看一下控制臺輸出:
看到我們在TestInterceptor
類中輸出已經(jīng)打印出來,這就是Spring AOP 攔截器的基本實現(xiàn)。到這里,你應(yīng)該明白了如何使用 AOP 來進行一些與業(yè)務(wù)邏輯無關(guān)且必須在代碼前后執(zhí)行的一些通用方法了,這就是我理解 AOP 的作用吧。
下載地址:SpringDemo_jb51.rar
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
文章標(biāo)題:詳解SpringAOP攔截器的基本實現(xiàn)
文章源于:http://aaarwkj.com/article4/ihhioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站營銷、面包屑導(dǎo)航、網(wǎng)站導(dǎo)航、域名注冊、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)