package org.framework.helper; import org.framework.bean.Handler; import org.framework.bean.Request; import org.framework.util.ArrayUtil; import org.framework.util.CollectionUtil; import org.framework.annotation.Action; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.Vector; /** * 控制器助手类 * Created by lizhaoz on 2015/12/17. */ public final class ControllerHelper { //用于放请求和处理器的映射关系,@Action()中的值就是 请求 private static final Map<Request,Handler> ACTION_MAP=new HashMap<Request, Handler>(); static { //得到所有有控制器注解的类 Set<Class<?>> controllerClassSet=ClassHelper.getControllerClassSet(); //判断是否为空 if(CollectionUtil.isNotEmpty(controllerClassSet)){ //遍历控制器注解的类 for(Class<?> controllerClass:controllerClassSet){ //获取Controller类的所有方法(不包括继承的) getMethods是返回public方法(包括继承的) Method[] methods=controllerClass.getDeclaredMethods(); //判断手否为空 if(ArrayUtil.isNotEmpty(methods)){ //遍历 for (Method method:methods){ //判断该方法是否带有Action注解 if(method.isAnnotationPresent(Action.class)){ //如果有,就获取注解 Action action=method.getAnnotation(Action.class); //得到URL的值,例如get:/customer String mapping=action.value(); //匹配URL映射规则, if (mapping.matches("\\w+:/\\w*")){ //把get:/customer切分成两段 String[] array=mapping.split(":"); if(ArrayUtil.isNotEmpty(array)&&array.length==2);{ //设置请求方法和请求路径 Request request=new Request(array[0],array[1]); //设置actionBean Handler actionBean=new Handler(controllerClass,method); //向映射得MAP中添加请求和 处理器方法 ACTION_MAP.put(request,actionBean); } } } } } } } } public static Handler getHandler(String requestMethod,String requestPath){ Request request=new Request(requestMethod,requestPath); return ACTION_MAP.get(request); } }