2020-01-17 16:02
@hzh740053757 ActionHandler 你可以继承一下,然后改掉里头的东西,最后配置一下:
public void configHandler(Handlers me) {
me.setActionHandler(new MyActionHandler());
}
通过上面的方式可以将 jfinal 默认的 ActionHandler 换成自己扩展实现的 MyActionHandler
jfinal 几乎所有的组件都是可以扩展的
2020-01-17 16:00
@北流家园网 java 的 Instrumentation 机制 + 定制 ClassLoader, 用这两套东西将 JVM 类加载接管过来,然后对于动态改变的 .class 文件进行重加载
重加载修改类并不是最麻烦的,最麻烦的事情是重加载类如果在内存中有对象实例,还需要将这些实例对象进行更新替换
jfinal undertow 用了 ClassLoader 通过重启容器来实现热加载,绕开了很多麻烦事
jrebel 这个第三方是专门实现热加载的,它做得比较细粒度,所以工作量极大,是一个很大的项目,可以参考一下
2020-01-16 19:00
将映射时的 "oauth/2.0/token" 改为 "oauth/20/token",也就是去掉小数点
然后用一个 Handler 做一下转换,将 String target 参数转换一下即可:
public class MyHandler extends Handler {
public void handle(String target ...) {
if (taget.startsWith("oauth/2.0/token")) {
target = target.replace("oauth/2.0/token", "oauth/20/token");
}
next.handle(...);
}
原因是 jfinal 会将带有小数点的 url 当成是静态资源,不会处理掉
上面的方案是将带小数点的 url 转成了不带小数点的,而 controller 被映射成了不带小数点的