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

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

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

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

(1) 全局拦截器:

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

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

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的实现类中配置全局拦截器:3d

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

(2)Class级别的拦截器:

新建一个classInterceptor拦截器:对象

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

执行结果:接口

咱们能够看出,全局拦截器以及class级别的拦截器全都有调用。get

(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中:

运行结果:

 

2、@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级拦截器以前而已。

相关文章
相关标签/搜索