JFinal 和 springMVC 流程分析
JFinal 架构分析
1. jfinal 的官方描述-- 基于java语言的极速WEB框架, 实际上它的框架逻辑很简单,是一个经典的MVC框架, 集成了路由, 控制器, 数据模型的处理, 提供了灵活的插件扩展机制, 像数据库连接池, 权限控制框架shiro, 缓存 ehcache, redis, 定时任务, 都是以插件的方式启动。
空间架构有五部分组成:
Handler责任链模式做一些权限控制和安全验证,
interceptor 对方法进行拦截 实现事务控制和日志打印,
Controller 实现路由到action的映射,再到数据层的处理
Render 渲染页面
Plugin 插件扩展
JFinal 流程分析
1. 容器启动的时候 初始化 ActionMapping 和 ActionHandler, Render
ActionMapping -- 根据 Route 和 Intercepter 初始化实例, 通过遍历Route 获得 path : action 的map 映射, action的初始化实际上是将Controller中的每个方法进行封装
ActionHandler -- (这里运用了责任链模式) 根据ActionMapping 和 constants 实例化, 并放置在 Handler 中, 如果存在其他 handler 则加入链中;
责任链模式是一种对象的行为模式。在责任链模式里,每一个对象对其下一个对象产生引用而连接起来形成一条链。请求在这个链上传递,链中的每一个对象会决定处理请求还是传递给下一个对象。
Render -- 根据 constant 觉得 渲染器 是 Freemarker 还是 Jsp
Model -- 通过 Plugin的方式 , 在 Plugin启动的时候进行初始化工作
2. 请求处理过程
1) 所有请求有 JFinalFilter 拦截, 调用 Handler 处理链, 最后调用 ActionHandler
2) 进去ActionHanlder 后, 通过 acionMapping 获得 Action (封装了方法名和方法上的拦截器) , 通过Action 实例化 Controller, 然后根据这两个参数 实例化ActionInvocation
3) ActionInvocation 通过invoke进行处理, 这是一个 command 模式的实现, 首先是拦截器的调用(拦截器会重新调用ActionInvocation的invokie, 实现aop) , 接着是通过反射实现method的调用
在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。
但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。
Command模式可应用于
a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
b)调用前后需要对调用参数进行某些处理。
c)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。
4) 返回ActionHandler 进行页面的渲染
springMVC 流程分析
1. SpringMVC是一个基于著名的Open-Closed,即开闭原则进行设计的框架。面向对象设计的精髓,是对现实世界中“行为和契约”的描述。这个“行为和契约”,体现在接口和抽象类的方法声明中。当你在越抽象的层次上将这些行为和契约描述清楚后,你所设计的系统就是越符合开闭原则的。
2.SpringMVC框架在面向对象设计上,做出了绝佳的示范。它通过高度抽象的接口,描述出了一次请求处理的流程,从而让整个框架从一开始就是符合开闭原则的。同时它也提供了这些接口的一系列默认实现类,让你不需要很复杂的配置,就能很好的使用SpringMVC进行开发。