日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

粗略的看JFinal的基于AOP的拦截器的实现

發布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 粗略的看JFinal的基于AOP的拦截器的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

簡單的說一下AOP的實現,所謂AOP,即(Aspect Oriented Programming)的縮寫,體現在程序中就是你可以通過配置在任意的代碼塊前后插入你想插入的執行代碼。例如日志、事務、權限驗證等。

首先看看Jfinal中基于@Before注解的攔截器如何用:

上面是一個簡單的Controller。JFinal中Interceptor其實是由三種粒度,全局攔截器,Controller攔截器已經Method級別的攔截器,上面中體現了兩點,這里我們僅對Method級別的攔截器進行剖析。

在JFinal中使用攔截器必須繼承Interceptor接口:

這個接口很簡單,只包含一個以ActionInvocaton為參數的方法,對于ActionInvocation顧名思義就是Action調度者,先來看看ActionInvocation的基本定義:

ActionInvocation會有一個invoke方法,調度Action的時候應該是new ActionInvocation().invoke()這個樣子的形式。這個可以在

com.jfinal.core.ActionHandler中找到:

/**

  • handle

  • 1: Action action = actionMapping.getAction(target)

  • 2: new ActionInvocation(...).invoke()

  • 3: render(...)

*/

上面可以看出,其實Action的調度者ActionInvocation實現了動態代理的功能,參考文章:JDK和CGLIB動態代理

攔截器實現類如下:

Before為用戶自定義注解:

來看看框架是如何根據注解獲取攔截器class的,這個要看JFinal的InterceptorBuilder類的實現:

注釋可以看出這是一個方法級別的攔截器構造,Method講師通過反射得到的index方法實例,而Method為我們提供了getAnnotation方法,這個方法可以獲取Before.class的注解,接著看createInterceptor方法的實現:

createInterceptor將構造一個hashMap,保存對應攔截器的名稱和實例。整個執行流程是這樣的: 用戶請求Action,ActionHandler處理用戶的請求,內部獲取對應的Action,其中Action中保存著已經構造好的攔截器信息,ActionHandler將用Action實例構造ActionInvocation實例,ActoinInvocation.invoke()將會實現切面代碼和Action代碼的執行。

轉載于:https://my.oschina.net/liuh1988/blog/357635

總結

以上是生活随笔為你收集整理的粗略的看JFinal的基于AOP的拦截器的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。