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的拦截器的实现相关推荐

  1. 框架:Spring Aop、拦截器、过滤器的区别

    Spring Aop.拦截器.过滤器的区别 Filter过滤器:拦截web访问的url地址. Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问. Spring A ...

  2. Spring AOP MethodInvocation拦截器调用原理

    Spring AOP源码目录 Spring AOP总览:灵魂画手图解Spring AOP实现原理 Spring AOP源码01:Jdk动态代理底层源码 Spring AOP源码02:ProxyFact ...

  3. Spring AOP与拦截器的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1. 作用层面     拦截器只对action负责,作用层面一般位于Controller层     Spring AOP主要是 ...

  4. 实现日志管理的两种方式:aop、拦截器

    一.Spring aop 实现 AOP概念: 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是Java应用程序中一个关于横切关注点的很好的例子.在Spring AOP ...

  5. spring---aop(3)---Spring AOP的拦截器链

    写在前面 时间断断续续,这次写一点关于spring aop拦截器链的记载.至于如何获取spring的拦截器,前一篇博客已经写的很清楚(spring---aop(2)---Spring AOP的JDK动 ...

  6. Springboot项目Aop、拦截器、过滤器横向对比

    前言 伟人曾经说过,没有调查就没有发言权(好像是伟人说的,不管谁说的,这句话是正确的),有些东西看着简单,张口就来,但很有可能是错的.我个人的经验是,aop.过滤器.拦截器的实现方式很简单,一学就会, ...

  7. spring aop实现过程之二Spring AOP中拦截器链

    1.开始步骤--获取AopProxy主流程 ProxyCreatorSupport.java /*** Subclasses should call this to get a new AOP pro ...

  8. Spring源码分析之Aop中拦截器,适配器,通知之间的关系

    首先举一个例子: public class MethodBeforeAdviceInterceptor implements MethodInterceptor, Serializable {priv ...

  9. SpringBoot 之多个过滤器(Filter) ,监听器(Listener),切面(AOP),拦截器(Interceptor)的指定排序问题总结篇

    相关文章: SpringBoot 之AOP切面的使用 SpringBoot之Listener注册到Spring容器中的多种方法 SpringBoot之Interceptor拦截器注入使用 Spring ...

最新文章

  1. 总结网站调用Flash的几种方法【转】
  2. Python中re.sub()实现替换文本字符串
  3. CALL SYMPUT与CALL SYMPUTX区别
  4. 基于HTML5 的人脸识别技术
  5. 编程的第一步都要使能时钟吗_在您的第一份编程工作中要做的11件事
  6. 12306再曝漏洞,一张身份证可买两张相同火车票
  7. 如何在Mac上使用预览在PDF上打字?
  8. NSA的各种***工具
  9. 一道简单的题学到的东西
  10. 全国大学生数学建模竞赛首战一等奖经验分享
  11. 第六章 C语言数组_什么是数组?C语言数组的基本概念
  12. php 取余数函数,PHP取余函数介绍MOD(x,y)与x%y
  13. FPGA的基本设计流程
  14. kvm连接服务器显示不全有重影,KVM多电脑切换器常见故障排查及处理方法
  15. ip_rcv_finish
  16. 唐山乐高机器人_唐山青少年乐高机器人编程学校
  17. 警告:Google公开Windows零日漏洞
  18. IE浏览器连不上网电脑无法联网
  19. BAT、360、今日头条的小程序大战 谁会是最后的赢家?
  20. 渐变色按钮功能按钮绘制C语言示例

热门文章

  1. android显示矩阵大小,关于android:显示代表灰度图像的双值矩阵
  2. html中加减号怎么输入,jQuery 实现点击加减号改变input标签中的value值,该怎么解决...
  3. mysql数据库优化语句_mysql数据库优化语句
  4. android html 显示表格边框,tablelayout表格布局详解
  5. mysql查询 百万_MySQL百万级数据分页查询优化
  6. 银联分账与银联代付_第三方分账系统到底有哪些作用?
  7. linux 如何查看属性,linux 下查看系统属性
  8. bb10系统支持java吗_黑莓BB10怎么样 BlackBerry 10系统好用吗?
  9. w3c html5 客户端缓存数据格式,Html5应用程序缓存(Cache manifest)
  10. vue怎么使用php调取数据,vue 数据操作