2020-11-11 12:06
@yxkuser 其实还是为了提升开发效率,因为扫描可以在新建 controller 时不用打开 Routes,不用添加映射代码。 开发体验更好一些
当然,凡事 兴一利必生一弊,一切都是权衡后的选择。 你说的照顾 spring boot 用户绝对是很硬的理由,也确实是我考虑的一个方面
2020-11-11 12:04
@琴海森林 jfinal 官方出品的,必定是极高品质的设计,极高品质的代码实现,测试了 windows、mac os、linux,这样交付给你的才是一个值得信任的作品
选择 jfinal ,没错的
2020-11-11 12:03
@北流家园网 这个功能主要能进一步提升开发效率,具体来说就是你在新建一个 Controller 的时候,省去了打开 Routes、添加 controller 注册这两个动作
当然,凡事 兴一利必生一弊,你说的这个根据路由快速找到 controller 的问题当然是存在的
所以,这个扫描功能相当于一个外挂性扩展,喜欢的同学可以用,不喜欢的可以沿用原来的用法
我自己试用的结果是正面的,体验很好。我个人建议你试用一下。 你提到的根据路由快速找到 controller 的问题确实存在,但有两点信息可以关注一下:
1:拿到一个 url 例如 "/club/join" ,其实可以使用搜索功能,搜索 @Path("/club 定位
2:我个人的开发实践表明,其实我很少在得到一个 url 以后通过查找 Routes 中的注册信息去定位 controller 。 因为一般来说路由使用的就是 controller 命名时的前缀,例如看到 "/club/join" 我会猜测对应的控制器是 ClubController
希望你在试用后能跟我反馈一下,体验是好是坏,我需要得到反馈,这样便于进一步迭代提升
2020-11-10 22:13
@qsyan 我觉得你今天看到 jfinal 也有路由扫描,仅从这一个功能特性就认定是轮子,这个显然是不全面的
因为,所有的 web orm aop 框架,不可能没有一点儿相似的地方,我强调,是所有的这类框架
2020-11-10 22:11
@qsyan 如果你真的仔细看过 jfinal 源代码,你就会知道 jfinal 与 spring 完全是两个世界,完全是两种不同的设计
再告诉你一个事实, jfinal 是 2011 年就存在的,开源是在 2012 年 3 月 18 日,这里有记录:
https://www.oschina.net/p/jfinal
而 spring boot 是 2014 年左右才出生,也就是说 jfinal 比 spring boot 早出生将近 3 年,jfinal 顶层设计 10 年不变
从这个出生的时间先后次序,你应该可以接受 jfinal 并不是 spring boot 的轮子。 倒是 spring boot 很多用法跟 jfinal 早期的设计很像
例如抛弃 xml, 简化配置, 约定大于配置, 谁是轮子,相信你有个新的认知
2020-11-10 22:00
@qsyan 应该是小编误点了,抱歉
有关是不是造轮子的事情,还请说得更详细一些
有时候确实是造轮子,有时候造的轮子会更好用
jfinal 的功能十分丰富,但代码量只有 3 万行,比 spring 少了十倍不止,如果如你所说是造轮子,应该也是一个更轻量更简单的轮子,有很多人还是很喜欢这样的轮子的
2020-11-10 17:07
写一个拦截器,用一个 ThreadLocal 传递, spring boot 本质上也是在 RequestContextHolder 通过 ThreadLocal 传递的
大致代码如下:
public class RequestContextHolder implemetns Interceptor {
static ThreadLocal《Request》 TL = new ThreadLocal();
public void intercept(Invocation inv) {
TL.set(inv.getController().getRequest());
inv.invoke();
}
public static Request getRequest() {
return inv.getRequest();
}
}
然后配置为全局拦截器:
configHandler(Handlers me) {
me.add(new RequestContextHolder());
}
用的时候这样:
RequestContextHolder.getRequest().getAttribute(...);
2020-11-10 17:02
@琴海森林 你这么一说,倒真是可以的,主要是因为现在的扫描方案性能极高
不过现在已经了自动生成功能,再扫描的话必要性就低了
要知道 Model 的自动生成功能有一个重要的点就是生成 baseModel, 这个可以快速响应数据库的变动
只要是生成 baseModel 的需求存在, 那么顺便生成一下 model 与 tabel 的映射也就可以了
2020-11-10 17:00
@天晴 这个只在开发环境下支持,生产环境不支持
java 是静态语言,要做到你说的需求很不容易,多年以前阿里就做过这样的尝试,最后失败了