求助关于拦截器使用过程中的一个疑惑

  1. 有三个Controller,分别为BaseController,UserController,CategoryController,UserController和CatgoryController继承自BaseController

  2. 在UserController上配置了class拦截器UserInterceptor,在BaseController上配置了class拦截器BaseInterceptor

  3. config中配置了全局拦截器GlobalInterceptor

    疑惑如下:

    UserController的拦截器列表中只有GlobalInterceptor和UserInterceptor,没有BaseInterceptor

    CategoryController的拦截器列表有GlobalInterceptor和BaseInterceptor。

    是jfinal就这样设计的吗,子类的class拦截器会覆盖父类的class拦截器,还是?


临时的解决方案是,把BaseInterceptor提升为全局拦截器,然后在拦截器中通过path来决定是否做相应处理。这样拦截器的意义就变了。而且对path的判断会很麻烦而且容易出错。

评论区

JFinal

2016-07-28 16:02

关于上面这些内容,记住一个关键点就行了: java 语言中,继承类上的同名注解会覆盖掉父类的同名注解。 有了这个关键点得出的 jfinal 拦截器的结论是: class 级别上用的 @Before(...) 这个注解,会被继承类中的 @Before(...) 给覆盖掉,相当于父类的就不存在了,当子类的 class 声明时没有使用 @Before(...) 父类的才会起作用。

前面讲的是 public class MyClass 上声明的 @Before,同理 method 上也是一样的道理。

刘方杰

2016-08-02 15:20

@JFinal 明白了,是我对注解掌握的不够。知识库又增加了个知识点,谢波总

JFinal

2016-08-03 11:30

@刘方杰 这个问的总结就是,有关类继承关系中的拦截器是否有效取决于 java 语言,jfinal 并未干预,多多支持 jfinal 发展 ^_^

热门反馈

扫码入社