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进行开发。

posted @ 2015-03-18 16:50  hewep  阅读(1544)  评论(0编辑  收藏  举报