背景:java
一、我使用的jfinal2.1;工具
二、我喜歡用@ActionKey("/admin/index")這一個功能,代碼複製性強,不喜歡在controller的類上加註解,很差打理;code
三、不想每次新增一個controller類都要在JFinalConfig的public void configRoute(Routes me),手動加入,但願代碼本身去找,就能夠了;路由
四、其實,我主要就是用它加載一下controller類文件,我不關心【controllerkey】叫什麼名字,由於,我用【actionKey】開發項目;開發
參考代碼:get
public class MyConfig extends JFinalConfig {//不相關的代碼,這裏就不顯示了 /*** 配置路由*/ public void configRoute(Routes me) { //【IndexController.classs】該類能夠本身定義,做用,帶頭大哥,出賣全部controller的位置。 String filePath = IndexController.class.getResource("").getPath(); File fileDir = new File(filePath); //包名 String controllerPackage = fileDir.getAbsolutePath().substring(fileDir.getAbsolutePath().indexOf("com")).replace("\\", "."); //包內的controller類名的集合 List<String> controllerNames = new ArrayList<String>(); if(fileDir.isDirectory()) { File[] list = fileDir.listFiles(); for(File file : list) { String fileName = file.getName(); //屏蔽內部類,好比:IndexController$1.classs if(fileName.indexOf("$") == -1) { controllerNames.add(fileName); String controllerName = fileName.substring(0,fileName.indexOf(".class")); String controllerKey = StrKit.firstCharToLowerCase(controllerName); try { @SuppressWarnings("unchecked") Class<Controller> controllerClass = (Class<Controller>) Class.forName(controllerPackage+"."+controllerName); //jfinal載入controller me.add(controllerKey, controllerClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } } }
固然上面的內部方法,能夠封裝成一個工具類。起個名字叫 SubRoutes extends Routes string
之後代碼JfinalConfig的配置路由代碼就能夠這樣寫it
public void configRoute(Routes me) { me.add(new SubRoutes(AdminIndexController.class));//後臺路由--加載後臺的全部controller類 me.add(new SubRoutes(WebIndexController.class));//前臺路由--加載前臺的全部controller類 }
固然,這裏io
AdminIndexController和WebIndexController不在同一個包裏面,是分開的,不在同一個文件夾
打完收工。