JFinal 4.1改变了JFinalConfig中插件和拦截器配置执行顺序?

JFinal3.8升级到4.1版本,发现项目报错。我调试了下4.1的执行顺序:configInterceptor,然后configPlugin。而3.8的相反。这样导致原来老项目某些变量报空指针错误。

评论区

JFinal

2019-06-01 22:35

解决办法是在 configConstant(Constants me) 中配置一下:
me.setConfigPluginOrder(1);

这个次序的调整在俱乐部群里的 jfinal-4.1-changelog.txt 中有说明:
是为了让 configRoute 中配置的 routes 级拦截器可以用上 configInterceptor 中配置的全局拦截器

JFinal

2019-06-01 22:35

记得搞定后回来反馈一下

it1728166827

2019-06-02 07:00

最终搞定了。加了还是空指针错误,只是不是之前的那个空指针。原因是原来项目代码某个插件中用了Routes,而Routes在插件之后执行,报空指针错。我调整了插件中的代码,问题就解决了。我在想,为了兼容以前的老代码,可否将configConstant(..)、configInterceptor(..)、 configRoute(..)、configEngine(..)、configHandler(...),以及ConfigPlugin等6个配置的执行顺序由用户控制,setConfigPluginOrder(int configPluginOrder)函数改为设置6个配置的执行顺序函数。我乱说的哈,不知道对框架有没有影响。感谢@JFinal的解答。

JFinal

2019-06-02 09:00

@it1728166827 对这六个回调方法做成可配置的,这个方案很久以前确实考虑过,考虑到学习成本问题,还是没采用,一般来说让 configPlugin 的次序变成可配置的,其它是固定的,使用上没有多少问题

如果让所有的回调都可以配置次序,也会引发问题,例如 configRoute 中要用到 configInterceptor 中配置的全局拦截器,所以必须要有一个先后关系

it1728166827

2019-06-02 16:34

明白了,确实如你所说。感谢!

热门反馈

扫码入社