简易MVC实现
简易MVC实现
大致流程梳理
1、加载基础包下所有带有@Action(类似@Controller)的类的Class对象,到一个List;
2、遍历所有Class对象;
3、逐个Class获取里面的Method[]对象;
4、遍历Method[];
5、判断如果Method带有注解@Request.GET(类似@RequestMapping),则需要将 请求方式、请求路径 封装成对象K,将Action的Class对象、Method方法对象封装成对象V(handler),将K、V存入一个映射actionMap;
6、真实请求进来以后,在重写的HttpServlet的service方法中,选择handler;
7、根据请求路径、请求方式,遍历actionMap,选择出对应的handler返回给service方法中;
8、根据action的Class对象,从IOC容器中获取actionInstance;
9、获取request、url中的参数(之前匹配actionMap获取指定handler判断时,已经将URL中的参数存入handler的matcher属性中)列表,并且整合参数列表actionMethodParamList;
10、检查参数列表跟handler中Method方法参数是否匹配;
11、反射执行。actionMethod.invoke(actionInstance, actionMethodParamList.toArray());
12、根据执行的result、request,封装返回视图到response;
代码分析
1、加载基础扫描包路径下的所有带有@Action注解的Class对象;
至此,MVC大致内容基本实现。
全篇讲解,基于黄勇老师的smart-framework
AOP待续...