JFinal 自动路由注册,节省开发时间

摘要: JFinal路由注册配置也是一个配置需要节省,所以也可以写一个通用的工具,把路由按一定规则自动注册,无须一个一个添加

原文地址:https://my.oschina.net/u/136848/blog/784802

一、路由注册的实现

       路由自动注册实现起来挺简单的,只需拿到所有的Controller配置到路由就行,代码如下

package com.nmtx.route;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jfinal.config.Routes;
import com.jfinal.core.Controller;
import com.nmtx.utils.ClassUtils;
public class AutoRoute extends Routes {	
	public  static Logger log = LoggerFactory. getLogger(AutoRoute.class);	
	private String packageName;	public AutoRoute(String packageName) {		this.packageName = packageName;
	}	@SuppressWarnings("unchecked")	public List<Class<? extends Controller>> getControllerClass() throws ClassNotFoundException {
		List<Class<?>> allClass = ClassUtils.scanPackage(packageName);
		List<Class<? extends Controller>> controllerClasses = new ArrayList<Class<? extends Controller>>();		for (Class<?> controllerClass : allClass) {
			controllerClasses.add((Class<? extends Controller>) controllerClass);
		}		return controllerClasses;
	}	@Override
	public void config() {		try {
			List<Class<? extends Controller>> controllerClassList = getControllerClass();			for (Class<? extends Controller> controllerClass : controllerClassList) {
				add("/" + controllerClass.getSimpleName().replace("Controller", "").toLowerCase(), controllerClass);
			}
		} catch (ClassNotFoundException e) {
		    log.error("auto route exception ",e);
		}
	}
}
/**
* 配置访问路由
*/
@Override
public void configRoute(Routes me) {
     me.add(new AutoRoute("com.nmtx.manager.controller"));
}

就可以专心写你的方法了,注解ActionKey可覆盖自动路由的配置

如果你的Controller叫UserController,访问路径就是/user+methodName

是不是很爽,结合自动表注册插件,参数校验插件,增删改的一步封装,用JFinal开发应用,真正的做到了只关注业务,让你有更多时间,陪妹子,陪家人,最后感谢波总的JFinal神器


评论区

海哥

2016-11-16 09:58

你没看到 @JPress 更灵活的做法。 :)

XiaoFei

2016-11-16 11:59

@海哥 只是分享一下他这个文章。

toni

2016-11-20 23:04

一直不太喜欢自动路由、自动表注册 的方式,虽然可以省几十行代码,但是当项目人员流动较大时培训成本略高。

JFinal

2016-11-20 23:12

@toni 自动路由还有很多其它缺点,这也是 jfinal 一直以来都不提供这个功能的原因,例如安全性问题,第三方 jar 包中的 Controller 是可以被扫描到的,还有开发模式下的启动速度等等

JFinal

2016-11-20 23:14

@toni jfinal 2.3 会添加一个路由级的 Interceptor ,可以对分组的路由应用拦截器,例如:
public class AdminRoutes extends Routes {
....
}
上面这个分路由,在注册时,可以同时注册拦截器,该拦截器会对其内所有控制器拦截:
AdminRoutes adminRoutes =new AdminRoutes();
adminRoutes.addInterceptor(....);
me.add(adminRoutes);
me.add(frontRoutes);

JFinal

2016-11-20 23:15

@toni 有了这个好用的功能,自动路由更加没有实现的必要了,此外,自由路由还拉高学习成本,还要引入新的概念,不是极简设计

semooncun

2016-11-26 11:21

@JFinal 这个真需要啊!!!2.3啥时候放出来哦哦

matol

2016-12-19 15:51

完全没必要搞得那么复杂,你一个系统能有多少主要的路由?非要搞得这自动识别,那自动识别,按照这样的想法,搞了一圈,又要回到配置文件的老路子上了。何必呢?

jounzhang

2017-07-27 15:16

豁然开朗

lijp

2017-09-07 16:54

yu men

xiaoxind

2017-10-26 17:15

ClassUtils代码呢

热门分享

扫码入社