文档章节

JFinal框架学习--- 拦截器的使用

Carol998
 Carol998
发布于 2018/09/16 10:33
字数 1027
阅读 68
收藏 1

  在JFinal中,JFinal提供了Interceptor接口来实现拦截器的作用,从而快速实现Aop。拦截器用于在某个方法或字段被访问之前,进行拦截然后再在该方法之前或者之后加入一些操作。

1.拦截器的分类以及配置:

在JFinal中,拦截器分为全局拦截器,Class级别的拦截器,Method级别的拦截器。(其中全局拦截器分为控制层的全局拦截器与业务层的全局拦截器)。使用@Before注解可以对Class级别的拦截器以及Method级别的拦截器进行配置。

(1) 全局拦截器:

使用全局拦截器时需要在JFinalConfig的实现类中的configInterceptor(Interceptors me)方法中添加拦截器。该拦截器对于所有的Controller都有效。

  在Interceptor包下新建TextInterceptor类并实现Interceptor接口:

package com.Interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;

public class globalInterceptor implements Interceptor{
    @Override
    public void intercept(Invocation inv) {
        inv.invoke();
        System.out.println("调用了globalInterceptor拦截器");
    }
}

 然后在JFnalConfig的实现类中配置全局拦截器:

然后我们运行一下项目,调用一个控制器的方法后,控制台输出:

(2)Class级别的拦截器:

新建一个classInterceptor拦截器:

并在Controller中使用@Before注解对这个拦截器进行配置:

执行结果:

我们可以看出,全局拦截器以及class级别的拦截器全都有调用。

(3)Method级别的拦截器:

package com.Interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;

public class methodInterceptor implements Interceptor{
    @Override
    public void intercept(Invocation inv) {
        inv.invoke();
        System.out.println("调用了methodInterceptor拦截器");
    }
}

在Controller中:

运行结果:

 

二、@Clear注解

   在某些场景下使用拦截器的时候,可能我们在Controller中除了一个方法不需要使用拦截器以外,其他方法都需要使用。这时,如果我们使用Method级别的拦截器,在每一个action上添加@Before,这就显得很麻烦。而JFinal为我们提供了@Clear注解,这为我们很好的解决了这个问题。

  在JFinal中,拦截器从上到下依次分为Global,inject,Class,Method。

 Clear用法技巧:

  • 只清除Clear本身所处层的向上所有层,本层与下层不清除。
  • 当Clear不带参数时清除所有的拦截器,当带参数时清除指定拦截器。

(1)当Clear在Method层时清除了 Method以上的所有拦截器:

 

(2)当Clear在Class级别时:

 

(3)当Clear带参数的时候:

输出结果:

清除了classInterceptor拦截器。

 

三,Interceptor的触发

   JFinal中的Aop分为控制层Aop以及业务层Aop。控制层的Aop在action运行时将会被触发,而业务层Aop则需要先使用enhance()方法对目标对象进行增强,然后再调用目标方法即可。

下面是业务层拦截器的实例:

(1)在service层中:

(2)在controller层中:

控制台输出:

 

四.Enhancer、Duang------对目标进行增强

在上面的例子中我们使用了Enhancer对目标对象进行增强使其具有Aop能力,下面我们来看看如何使用Duang:

 

五. Routes级别的拦截器:

 Routes级别拦截器是指在Routes中添加的拦截器。该拦截器对所有controller中的action都具有烂机器作用。并且将在class级别拦截器之前被调用。

 

六.Inject拦截器

Inject拦截器是指在使用enhance或duang方法增强时使用参数传入的拦截器。Inject可以对目标完全无侵入地应用AOP。

与Class级拦截器一样,Inject拦截器将拦截被增强目标中的所有方法。Inject拦截器可以被认为就是Class级拦截器,只不过执行次序在Class级拦截器之前而已。

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
Carol998
粉丝 2
博文 11
码字总数 9003
作品 0
绵阳
私信 提问
JAVA 极速WEB+ORM框架 - JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、p...

JFinal
2012/03/18
0
496
JFinal Extensions 2.1 发布,JFinal 扩展

Jfinal-ext是对java极速web框架 jfinal 的一个扩充,主要利用jfinal微内核高扩展的特性扩展常用的实用功能和集成各种第三方框架,简化开发者的学习应用成本,为您节约更多时间,去陪恋人、家...

绝望的八皮
2013/05/16
2.3K
19
jfinal.jar中的 ext疑问

@JFinal 你好,想跟你请教个问题: 1、jfinal.jar中的ext是jfinal的一些扩展吧?提供了一些大家常用的工具类或处理类 2、关于拦截器的清除ClearInterceptor,现在只能清除上一级别和全部的拦...

zhl0635
2015/02/01
119
1
JFinal框架学习-------EhCachePlugin

一.关于EhCachePlugin 在之前的文章中,我们已经介绍过了JFinal中Cache的一些简单使用,这篇文章将讲述EhCachePlugin的使用, EhCachePlugin是JFinal集成的缓存插件,通过使用EhCachePlugin...

Carol998
2018/10/11
0
0
JFinal Extensions 3.1 发布,JFinal 扩展

Jfinal-ext是对java极速web框架 jfinal 的一个扩充,主要利用jfinal微内核高扩展的特性扩展常用的实用功能和集成各种第三方框架,简化开发者的学习应用成本,为您节约更多时间,去陪恋人、家...

绝望的八皮
2014/10/15
2.6K
27

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 姑娘馋的口水都留下来了。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @且无需多言 :分享Fall Out Boy的单曲《Disloyal Order Of Water Buffaloes》 《Disloyal Order Of Water Buffaloes》- Fall Out Boy 手机党...

小小编辑
今天
74
7
vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
9
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部