通过注解实现路由前缀配置,并自动扫描,主要是减少Routes的继承与书写.可以向spring系列一样,在controller加上@RequestMapping来实现路由前缀配置.拦截器配置,视图路径配置等
使用方式:
第一步:
@Override
public void configRoute(Routes routes) {
    // 自定义自动扫描路由工具,与系统不冲突
    RoutesKit.initRoutes(routes);
}第二步,在Controller上加上使用的注解即可,可以配置viewPath,与拦截器
@RequestMapping("/u")
public class LoginController extends BaseController {
    ....
}具体实现代码:
定义注解,主要有 路由,视图路径,与拦截器三个属性
/***
 * 请求映射前缀, 只能用于类上  
 * 例如:RequestMapping("/hello),则 实际url为 /hello/方法名称
 */
@Retention(RUNTIME)
@Target(TYPE)
public @interface RequestMapping {
    /***
     * 请求的前缀
     */
    String value() default "/";
    /***
     * 返回视图的前缀,用于没有分离视图用,如果没有配置,则默认使用路由的前缀
     */
    String viewPath() default "";
    /***
     * 拦截器
     */
    Class<? extends Interceptor>[] interceptor() default {};
}具体扫描实现:
/**
 * @createTime: 2019/1/6
 * @author: HingLo
 * @description: 路由自动扫描工具
 */
public class RoutesKit {
    /***
     * 初始化路由工具 在JFinalConfig中configRoute方法中调用,通过对controller上加上RequestMapping 来自动扫描与初始化路由<br>
     * 需要通过:hutool工具包中ClassUtil工具来进行扫描类
     * @param routes JFinalConfig 中路由配置的configRoute 参数
     */
    public static void initRoutes(Routes routes) {
        //扫描项目下的所有的带有RequestMapping 的Controller
        Set<Class<?>> set = ClassUtil.scanPackageBySuper("", Controller.class);
        for (Class x : set) {
            RequestMapping annotation = (RequestMapping) x.getAnnotation(RequestMapping.class);
            // 用来限制只有加上了RequestMapping注解的controller才进行自动初始化
            if (annotation == null) {
                continue;
            }
            // 获取controllerKey
            final String path = getPath(annotation.value());
            // 获取视图路径
            String viewPath = annotation.viewPath();
            // 获取拦截器
            Class<? extends Interceptor>[] interceptor = annotation.interceptor();
            Routes routes1 = new Routes() {
                @Override
                public void config() {
                    // 添加拦截器
                    if (interceptor.length > 0) {
                        for (Class<? extends Interceptor> aClass : interceptor) {
                            addInterceptor(ReflectUtil.newInstance(aClass));
                        }
                    }
                    // 设置视图,如果视图是空,使用path 作为视图路径
                    setBaseViewPath(StrKit.isBlank(viewPath) ? path : viewPath);
                    // 设置路由
                    add(path, x);
                }
            };
            routes.add(routes1);
        }
    }
    /***
     * 请求路由处理
     * @param path 原始路由
     * @return 返回处理后的路由
     */
    private static String getPath(String path) {
        path = path.trim();
        if (!path.startsWith("/")) {
            path = "/" + path;
        }
        if (path.endsWith("/")) {
            path = path.substring(0, path.length() - 1);
        }
        return path;
    }结尾:自此就结束了,整体代码都不是很多,但是需要引入:hutool这个工具包进行Controller扫描.hutool工具包的地址:Hutool 工具包文档地址
 
 
 
 
 
 
