开发者社区 问答 正文

我想请教jfinal使用上的几个问题

1.jfinal框架里面有没有像springmvc那样方便的Controller类上RequestMapping注解

2.jfinal里面有没有像springmvc里面那样传递参数的时候可以动态绑定到参数列表中的对象中的方法

支持jfinal。如果有的话就能方便的拿来用了。如果没有的话,那我这边就自己造轮子了

展开
收起
a123456678 2016-03-18 09:27:52 2383 分享 版权
1 条回答
写回答
取消 提交回答
  • 无论是注解还是其它形式的配置,例如xml,在 JFinal 中都会被尽可能地避免,注解也是配置的一种形式。COC 原则是比使用配置更加优秀的思想。

    所以 JFinal 只需要使用 me.add("user", UserController.class) 这种方式即可将 UserController 中所有 action 进行路由配置,而不必对每个 action 使用冗余而繁琐的 RequestMapping 注解。
    

    动态参数绑定到参数列表对于 java 语言来说不太合适,除了有性能方面的原因,更重要是语言方面的支持力度不够。例如:假定 public void action(String userName) 这个 action,传来了一个参数叫 String userName,对于框架实现来说,要得到 userName 这个参数所对应的值需要这样 reqeuest.getParameter("userName"),问题来了,对于java 语言来说无法得到 "userName" 这个字符串,也即你无法知道形参的参数名,只能知道它的参数类型,因为String userName 这个参数的名称会在编译后变成一个符号性的东西。

    在 java 世界里,想要知道方法参数名称通常的做法是使用额外的注解,spring 是这样解决的:public void action(@Parameter(name="userName") String un),这种方式代码量提升了不利于极速开发。另一个得到参数名称的办法是通过类似于 eclipse 编译器 ecj 这样的东东,这种编译器在编译 java 代码时,将参数名称进行了保留没有符号化,但你需要写程序对编译后的 class 文件进行分析得到参数名称,这样不仅对性能十分不利而且一旦换了编译器就会失效,体验非常地差。eclipse 的 ecj 的目的是为了代码提示功能可以显示出参数名,也为了调试程序时可以显示参数名。语言层面还有一个纠结的问题,如果编译时保留参数名,那么反编译就变得更容易。
    
    以上的讨论还没有涉及action method带参数后重载方法的问题,随着讨论的深入会发现复杂度会提升更多,而 jfinal 的解决方案是以上权衡后的结果,使用 getModel(...) 就可以搞定参数的绑定,代码量不仅极少,而且性能最优。如果将来 java 在语言层面对方法参数名有支持 jfinal 会立即考虑实现,作者所期望的形式类似于这样: Para p = method.getPara(int); String paraName = p.getName();
    2019-07-17 19:05:52
    赞同 展开评论
问答地址: