文档章节

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

Carol998
 Carol998
发布于 09/16 10:33
字数 1027
阅读 11
收藏 5

  在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
粉丝 1
博文 5
码字总数 3536
作品 0
绵阳
JAVA 极速WEB+ORM框架 - JFinal

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

JFinal
2012/03/18
0
496
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
0
21
jFinal+AngularJs未来javaEE开发的趋势——程序员的福音

最近有意无意、机缘巧合之下认识了两个新的WEB框架,其中一个是后端框架叫JFinal,看名字就让人觉得为之一振,最后的、最终的,没错它的意思就是“我是JavaEE的终极框架”,没有比这更好的啦...

moz1q1
2014/08/05
0
2
基于JFinal实现的权限管理系统 JFinalUIB

项目用到了众多的开源组件,还有一些是网络分享的学习示例代码片段,感谢他们!!! JFinal高级学习交流QQ群:309647612 代码库地址:http://git.oschina.net/dongcb678/JfinalUIB.git 项目背景...

littleant
2014/06/03
0
35
给JFinal添加Shiro插件功能,支持Shiro所有注解-实现篇

2015年8月3日更新: 支持JFinal 2.0 版本,同时给出了一些实际代码,想见git @JFinal给出了一些好的建议,已重构部分代码。 代码放在oschina的git上,访问地址: http://git.oschina.net/mya...

玛雅牛
2013/06/12
0
8

没有更多内容

加载失败,请刷新页面

加载更多

python装饰器执行顺序

上来先看代码: import timedef deco(func): def wrapper(): startTime = time.time() print "start" func() print "end" endTime =......

fang_faye
31分钟前
1
0
java常用设计模式

设计模式:面向接口和抽象类编程,依赖接口或抽象类而不依赖具体实现 一、创建型 1、工厂方法(Factory Method) a、普通工厂:根据不同参数返回创建的不同对象。 b、工厂方法:根据不同方法...

狠一点
33分钟前
1
0
python:获取文件最后N行

#获取文件最后N行的函数 def tail(inputfile) : filesize = os.path.getsize(inputfile) blocksize = 1024 dat_file = open(inputfile, 'r') last_line = "" if filesize > blocksize : maxs......

perofu
39分钟前
2
0
JavaScript(四):注释

认识 注释的作用 是提高代码的可读性,帮助自己和别人阅读和理解你所编写的JavaScript代码,注释的内容不会在网页中显示。 注释可分为 单行注释与 多行注释 两种。 我们为了方便阅读,注释内...

Agnes2017
46分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部