关于jfinal三个注解controller,service,mode注解

最近在研究jfinal,看了《jfinal极速开发实战》这本书,jfinal这个框架真的很简洁,强大。但是关于这里的注解感觉好复杂,有点不懂,求大神解惑

评论区

JFinal

2016-10-27 14:55

jfinal 中使用的注解很少,核心注解只有 @Before、@Clear、@ActionKey 这三个,具体的用法在手册上有明确说明,建议下载首页的 jfinal 手册看一下,少走很多弯路

都教授

2016-10-27 15:19

@JFinal 那我现在搭建一个项目,service层,controller层,这些并不是一定需要注解来声明的?

zempty

2016-10-27 15:31

@都教授 把那些丢了。jfinal的配置全在config类里。

都教授

2016-10-27 15:59

@zempty 可能是之前一直用ssh框架的原因,每个层之间习惯的使用注解,不用总觉得不对,这里controller的注解只是路由可以在config里面设置,但是这里service层一定需要注解吗?

zempty

2016-10-28 11:12

@都教授 不知道service层是怎么分的。就是你配好了controller,然后就可以通过http://localhost/project/controllerkey/method,访问你写的方法了。是这样的啊。我觉得ssh的分层太恶心了,受不了受不了。有些人不管有没必要都乱分,一个屁大的系统都分一堆interface,然后impl,我受不了。我都想用jfinal重写,但是想想算了,我何必呢?又不是我的项目!

cctvsod

2016-11-20 23:38

@zempty 说道我心坎了,看到所有的dao、service都加个impl就够够的

yuner

2018-07-13 11:20

@JFinal @clear很鸡肋?
@Before(AAA.class)
public class UserController extends Controller {
@Clear
@Before(BBB.class)
public void login() {
// Global、Class级别的拦截器将被清除,但本方法上声明的BBB不受影响
}
这个方法中AAA.class 好像本来就没什么用啊
也就是说没有method级别@before的时候 cleal才有其用武之地?
@Clear({AAA.class, CCC.class})// 清除指定的拦截器AAA与CCC
@Before(CCC.class)
public void show() {
// 虽然Clear注解中指定清除CCC,但她无法被清除,因为清除操作只针对于本层以上的各层
}
这个方法也一样 本身就清楚不掉CCC.class 即使加了clear(ccc.class)还是没作用啊 clear始终是清楚不掉method级别的拦截器的?

}
求解惑

JFinal

2018-07-13 14:28

@yuner Method 级别的拦截器直接删掉就可以,没必要用 @Clear

yuner

2018-07-13 15:12

@JFinal 看来我是钻牛角尖了 试了两个小时都觉得clear是真的不能清除method级别的拦截器。。。。。。。。。

JFinal

2018-07-13 16:03

@yuner Clear 本来就无法删除 method 级别的拦截器,本身就是这么设计的。 你并没有钻牛角尖,可能是看错了这个功能点

yuner

2018-09-14 09:16

@JFinal conroller方法加了参数之后 路由里面的 method方法就变成 urlpara了 method路由就一直是index 去掉参数就正常了 为什么啊

JFinal

2018-09-14 09:59

这个就是 jfinal 的路由规则而已,建议再仔细看一下路由部分的文档:
http://www.jfinal.com/doc/2-3

jfinal 的路由已经是极度简洁的设计了,只有四条规则,分分钟掌握

此外,如果对于有些 action ,你不希望使用 urlPara,或者对 urlPara 有数量控制,可以用一下下面的方法:
public void index() {
checkUrlPara(0);
.....;
}

上面的代码是不使用 urlPara,下面给出使用 3 个 urlPara 的代码:
public void index() {
checkUrlPara(3);
.....;
}

你还可以使用拦截器来统一控制:
@Before(NoUrlPara.class)
public void action() {
....
}

如果将 NoUrlPara 拦截器配置为全局的,那么所有 action 都不能有 urlPara 了,这样就可以省很多代码:
me.add(new NoUrlPara());

在上面这个配置下,如果有个别 action 你又希望使用 urlPara 的话,用 @Clear 移除它就好:
@Clear(NoUrlPara.class)
public void action() {
...
}

热门反馈

扫码入社