使用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;
        ……
        ……

問題解決。

相關文章
相關標籤/搜索