科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Spring MVC framework深入总体分析2

Spring MVC framework深入总体分析2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Spring MVC framework深入总体分析

来源:IT专家网 2008年5月9日

关键字: framework MVC Spring java

  • 评论
  • 分享微博
  • 分享邮件
五、 Spring提供了不错但不够充分的interceptor机制

  回头看一下struts,它在架构里甚至没有给我们提供hook point的机会,我们没有任何机会加入自己的interceptor.我们只能通过重载struts的RequestProcessor类来进行一点有限的扩展。

  到了Webwork2,似乎interceptor一下子成了整个Framework的核心,除了Action的核心部件,其它所有的东西都是interceptor.它的超强的interceptor功能使们扩展整个架构变得非常方便。有人称这种interceptor为AOP,Jason Carreira则自豪地宣称这个叫做pragamtic AOP.我不认同这是AOP,它只是简单的interceptor机制。但不管如何,它的interceptor确实有强大的功能。

  Spring也提供了它的interceptor机制,它的HandlerInterceptor三个interceptor方法:peHandle, postHandle, afterCompletion.分别对应Controller执行前,Controller执行后和page render之后。虽然大多数情况下已经够用,但是从功能上来说显然它没有Webwork2强大。从AOP的角度来看,它没有提供around interceptor,而只有before与after interceptor.这意味着我们无法在interceptor前后保持状态,最简单的情况假如我们要计算一个Controller的执行时间,我们必须在执行完before后把begintime这个状态保持住,再在after里把它调出来,但是显然这个状态保持会是个问题,我们不能把它放到instance变量里,因为interceptor不是线程安全的。也许通过ThreadLocal可以解决这个问题,但是如此简单的功能要用到这样的方法来处理,显然这个Interceptor本身设计上还是有点问题的。

  六、 Spring提供了MultiActionController,使它可以在一个类里包含多个Action

  这个设计和struts的DispatchAction有点类似,只不过提供了更灵活的机制。当我们的项目变大的时候,把功能类似的方法放到同一个Action里完全值得的!Webwork2缺少这样的机制。假如看一下Spring的源代码,会发现其实实现MultiActionController的工作量相当的少,只不过是用反射机制把解析出来的方法名执行一下就完事了。其实Webwork2也完全可以提供这样的机制。虽然从设计上来说确实不是很优雅,但是它确实很有用。

  七、 Spring提供了更多的选择方式

  看看Spring里提供的Controller吧,它提供了好多不同的Controller类。要生成Wizard吗?要专门用于提交form的Controller吗?要执多个方法的类吗?Spring提供了丰富的子类来扩展这些选择。当然我们还可以很轻松地自己扩展这些功能。

  再看看Spring的ViewResolver吧, 它提供了无数不同类型的ViewResolver.更重要的是我们自定义我们的页面映射方式。看看strtus,看看webwork2,都会存在页面与forward name的一层间接转换,我们必须在配置文件里配置好某个字符串(典型的是success)对应的是那个页面。但是Spring里我们有了更大的自由度,我们可以采用webwork2的策略,也可以采用更简单的策略,如将JSP文件名去掉扩展名的映射方法。也许有人认为这种映射方式很幼稚,但是我觉得它是非常有用的方式,即使在大项目里。

还有新的扩展吗?看看Spring Web Flow吧,它是SpringFramework的子项目。它为一长串的基于页面流的Wizard页面提供了可配置的实现方式。在Spring 1.3里,它将是SpringFramework的一部分。

  八、 Spring的tag

  尽管Spring的tag数量上少得可怜,但它却是精心设计的。它的目标很简单:让美工可以轻松地编辑页面。因为在Spring的页面里Text仍然是Text,checkbox仍然是CheckBox,而不象在struts或webwork2中的Tag.它只是用Springbind对输入内容进行了一下包装。所以尽管页面显示代码上会比Webwork2多,但这绝对是有价值的。

  在接下来的几章里,我会分析一下Spring是如何让我们的Web应用不需要知道ApplicationContext就能够访问IOC容器的,然后会对Spring的设计和执行过程进行简单的源码分析,然后给出几个扩展Spring MVC的方法。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章