背景:
1、我使用的jfinal2.1;
2、我喜欢用@ActionKey("/admin/index")这一个功能,代码复制性强,不喜欢在controller的类上加注解,不好打理;
3、不想每次新增一个controller类都要在JFinalConfig的public void configRoute(Routes me),手动加入,希望代码自己去找,就可以了;
4、其实,我主要就是用它加载一下controller类文件,我不关心【controllerkey】叫什么名字,因为,我用【actionKey】开发项目;
参考代码:
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
以后代码JfinalConfig的配置路由代码就可以这样写
public void configRoute(Routes me) {
me.add(new SubRoutes(AdminIndexController.class));//后台路由--加载后台的所有controller类
me.add(new SubRoutes(WebIndexController.class));//前台路由--加载前台的所有controller类
}
当然,这里
AdminIndexController和WebIndexController不在同一个包里面,是分开的,不在同一个文件夹
打完收工。