jfinal 3.3 初始化顺序问题

image.png

jfinal 2.2 调用顺序

image.png

3.3调用顺序。

请教下为什么会做出这种调整呢 因为有些插件是依赖路由的


解决方案:

    小可的需求是更具plugin获取到路由对象

    在plugin中创建routes对象

    image.png

    并且开放get方法

image.png

    在config中调用get方法获取路由对象(注:这会儿还是空的路由只是添加个引用,这里有值对象和引用对象需要有点概念)

image.png

    由于是引用所以在这里routes是已经有值的了

    image.png

    如果需求与小可相反是插件依赖于routes 也可以使用小可自己写的这个插件控制反转 使用实例(这里有分支master是3.1以下版本。3.3则是针对调整的修改。注:启动顺序反转先启动)

    如果不使用可以使用中间方法去初始化路由例:

private Routes routes = new Routes(){
    public void config() {
    }
};

private Routes getRoutes(){
    routes.add(xxxx,xxxx,xxx);
}

@Override
public void configPlugin(Plugins plugins) {
    routes = getRoutes();
    xxPlugin plugin = new xxPlugin(routes);
}

@Override
public void configRoute(Routes routes) {
    routes.add(this.routes);
}


评论区

JFinal

2017-12-11 21:38

是因为有人提出新的需求:路由可以在数据库中配置,所以需要先启动 ActiveRecordPlugin,然后读数据库,用从数据库读出来的路由用于 configRoute(...) 中的配置

没有料到居然有这个次序有敏感的情况存在,你那的场景是什么? 我这里急切需要得到应用场景,可以更好去改进 jfinal 3.4

獨愛

2017-12-12 13:51

@JFinal 我这边的场景就是根据自定的注解使用插件扫描动态注册路由 因为插件启动的时候发现routes是null 所以引发的问题,既然这样那就算了 我可以通过修改插件解决这个问题,谢谢了

JFinal

2017-12-12 16:30

@獨愛 麻烦将解决方案分享出来,因为这个貌似不太好解决,如果你的方案很好,可以用于改进 jfinal 3.4 , 感谢

懒猫

2017-12-13 11:06

用惯了之前的后,现在有一种违和感。如果仅仅是从数据库读取路由这个需求,可以由一个启动顺序参数来决定先启动路由或者插件更好,或者单独把数据库这一块与其他插件分隔开。

JFinal

2017-12-13 11:37

@懒猫 主要是当时没想到会有这个影响,jf 3.4 会想办法解决,已经有了初步的方案,尽可能做到可以定制 configPlugin 的次序

此外,我也希望得到你的应用场景,这样在做这个功能时候能掌握更多信息量,做得更好

獨愛

2017-12-13 13:59

@JFinal 我在插件里创建出了routes 然后开放了get方法,就解决了...然后在config 调用get方法 在路由配置那里add进去了

JFinal

2017-12-13 14:21

@獨愛 能不能在这个贴子里头追加解决方案的这部分内容,最近好多人问到这个问题,先谢谢了

獨愛

2017-12-14 09:53

@JFinal 解决方案已更新 针对两种需求去解决的如果还不行可以叫他私信我,一起讨论下,客气了