使用jfinal-routebind出现bug致使修改代码后jetty没法正常重启


问题描述:java

项目开始启动的时候,没问题。工具


修改代码后jetty启动报错,说是ActionKey已经存在了,检查后发现,RouteBind类的config()中。debug

List<Class<? extends Controller>> controllerClasses = ClassSearchKit.of(Controller.class)
.includepaths(includeClassPaths).search();

问题出在这段代码。code

debug进去WebAppClassLoader类中的getResources()方法里面。发现。rem

classes路径保存了两个同样的,致使后面扫描的时候,class文件保存了两份。
get

进入ClassSearchKit 类里面查看search()方法it

return extraction(target, classFileList);

这个方法返回了最终的classFileList。io

启动时:class

修改代码重启时:List

classFileList中每一个controller都重复了。

因此,写一个工具类,将生成的list中,重复的Controller去掉就能够了。

public class CollectionKit {
    
    public static List<Class<? extends Controller>> removeDuplicate(List<Class<? extends Controller>> list){
        HashSet<Class<? extends Controller>> h = new HashSet<Class<? extends Controller>>(list);
        list.clear();
        list.addAll(h);
        return list;
    }
}

以后RouteBind类的config()方法掉调用一下就能够了。

public void config() {
        List<Class<? extends Controller>> controllerClasses = ClassSearchKit
            .of(Controller.class).includepaths(includeClassPaths).search();
        controllerClasses=CollectionKit.removeDuplicate(controllerClasses);
        
        ControllerKey controllerKey = null;
        ……
        ……

问题解决。

相关文章
相关标签/搜索