问个问题:关于业务层拦截器

在学习 jfinal-2.2-manual.pdf ,关于拦截器,是这样描述的:

(1)全局拦截器分两类:控制层AOP 和 业务层AOP。两个都在AppConfig中配置。控制层AOP只要在 AppConfig 类中配置,即会对所有访问进行拦截。

(2)类拦截器、方法拦截器:在类或方法上用@Before注解即可起作用。


关于业务层AOP,如下图的例子:

blob.png

看文档描述的意思,好像是:

业务拦截器,需要3个条件:

(1)在AppConfig中配置。

(2)在需要拦截的类或方法上用@Before注释。和类、方法拦截器使用时一样。

(3)调用时用Duang(这真是一个好名字)进行增强。


上面的理解是否正确?老感觉步骤(2)有点多余。

还是我对文档的理解错误,只需要(1)(3)。


评论区

JFinal

2016-12-02 16:39

关于业务层拦截器,AppConfig 中配置是指配置全局拦截器,如果你不需要全局拦截器则不需要,这一条与控制层拦截器也是一样的。第二条与控制层拦截器是一样的。只有第三条是业务层独有的,需要对被拦截的类进行一下增强,控制层拦截器是自动增强的,不需要 Duang

劲风

2016-12-02 17:26

@JFinal 感谢波总抽空解答。但还是有点有明白的,再问一下:

我理解,应当是这样:
(1)全局拦截器中的“控制拦截器”,只需要1个条件,即在AppConfig中配置就能起作用。不需要用@Before再在具体的类上注解。
(2)全局拦截器中的“业务拦截器”,需要2个条件,需要AppConfig配置 和 Duang增强就能起作用。不需要用@Before再在具体的类上注解。
(3)类、方法拦截器,也是只需要1个条件,用@Before在具体的位置注解即可起作用。

但看上面的解答,好像意思是:
(1)全局拦截器中的“控制拦截器”,只需要2个条件:AppConfig配置、@Before注解。
(2)全局拦截器中的“业务拦截器”,需要3个条件:AppConfig配置、@Before注解、 Duang增强。
(3)类、方法拦截器,只需要1个条件:@Before注解。

如果是这样的话,那么“控制拦截器”和“类、方法拦截器”的区别又在哪?全局,又在什么地方体现?

JFinal

2016-12-02 18:14

@劲风 前面是指“控制层”拦截器,不是“控制”拦截器。这样整理一下思路,一切都好理解了:
1:拦截器可以用在两个层面,一个是“控制层”,另一个是“业务层”,其中“业务层”是一种狭义的说法,更加合理的说法是“非控制层”,也就是说所有“控制层”之外的情况

2:“控制层”拦截器是指用在 Controller 上的拦截器,“业务层”拦截器是指用在 "非Controller" 的其它地方的拦截器

3:无论什么拦截器都分为三种:global、class、method级

4:控制层拦截器的 global 通过 me.add(...) 添加,非控制层的 global 通过 me.addGlobalServiceInterceptor(...) 添加

5:控制层与非控制层的 class 级拦截器都是通过在紧靠 public class 的地方使用 @Before(...) 添加

6:控制层与非控制层的 method 级拦截器都是通过紧靠在方法声明的地方使用 @Before 添加

7:控制层拦截器是自动触发的,有了上述的添加,会自动触发,非控制层的拦截器需要先通过 Duang.duang(...) 或者 Enhancer.enhance(...) 以后,才能被触发

简单总结起来其实就两点:
1:两类拦截器的配置方式是类似的,唯一不同的是配置全局拦截时调用的方法名不同,一个是 me.add(...) 一个是 me.addGlobalServiceInterceptor(...)

2:控制层拦截器自动触发,而非控制层需要先增强

劲风

2016-12-02 20:05

@JFinal 这下说明的非常清楚,一下子全明白了。非常感谢耐心回复。

之前我理解的分类方法有问题,以为控制层拦截器和非控制层拦截器 是属于全局下面的两个小分支,搞错了。

可以考虑将上面的说明,添加的未来的文档中。
再次感谢!

JFinal

2016-12-02 20:21

@劲风 文档频道功能早就做完了,一直没时间,这个频道会出非常详细的文档

JFinal

2016-12-02 20:22

@劲风 感谢你的支持,刚才收到 99 的捐助,看到你的昵称,应该是你的捐助,非常感谢你对 jfinal 社区的支持

劲风

2016-12-02 21:33

@JFinal JFinal对java开发领域的贡献是值得敬佩的,随喜支持一下。

JFinal

2016-12-02 21:39

@劲风 感谢支持,jfinal 2.3 更加好用,正在内测中,多多关注社区动态

热门反馈

扫码入社