SpringMVC框架学习01_框架和最佳实践

【作者:任小龙,叩丁狼高级讲师。原创文章,转载请注明出处。】

大家好,从今天开始我将通过该平台,为大家带来SpringMVC框架的系列文章,也包括一些杂谈,涵盖一些理念思想,也包括SpringMVC的开发使用以及SpringMVC底层代码。
编程不仅要理解代码的编写,更应该在乎底层原理和思想的演变,知其然,并知其所以然才是硬道理。
写文章的过程中,我依然会延用平时上课的风格——简单明了,又不失幽默的语言来给大家讲解这个框架,希望大家能从中受益。
阅读该系列文章需要读者具备JavaWeb和Spring的IoC思想的知识储备,如果学习Struts2和MyBatis框架当然更好。
本文需要探讨的有两个点:
一、框架
二、最佳实践

中国人喜欢玩拆字游戏,不仅拆字的过程有趣,且能从中悟到什么道理,关键是还能卖弄一下风骚。好,我也来卖弄一次,我们即将要学习的是SpringMVC框架,很显然,这是一个框架,且是一个MVC框架,顾名思义和Spring框架应该是有关联的。那这里就有几个点需要解释一下了:

  • 一、什么是框架;
  • 二、什么是MVC;
  • 三、SpringMVC是什么;

那好,先来探讨第一个问题,什么是框架。

框架

我们先来看一下百度百科的解释。

框架(Framework)
①:是一个框子——指其约束性。
②:也是一个架子——指其支撑性。
③:是一个基本概念上的结构,用于去解决或者处理复杂的问题。

某种房屋框架图

在这里,大家先记住framework这个单词,它就表示框(第四个声调)架的含义。上述的解释来源于建筑行业的理解,当然软件工程很多设计思想都来源于建筑工程学,相对于软件这个抽象的概念,我们提到的建筑肯定具体形象的多。通过上述的解释,我们不难得出这么几个结论:

  • 框架的作用是为了解决处理复杂的问题,比如上图就是一个房屋的框架图,没有框架,就得从零开始搭建,而该框架存在的目的就是在此基础之上能迅速搭建一个房屋建筑。
  • 框架是一个框子——这说明框架具有约束性,必须遵循该框架的架构约束,比如上面房屋架构图就规定了一个房子就必须按照这种框子来搭建,不能胡乱设计。
  • 框架是一个架子——这说明框架一个半成品,我们所谓的使用框架其实就可以在框架的基础之上继续做开发,没有必要每次都从零开始。引用牛顿先生的话,我之所以看得更远,是因为我站在巨人的肩膀上。这个巨人,对于我们软件开发而言可以就是框架。

Java中的框架,由多个jar包组成的,完成了对JDK功能的拓展,目的是解决某一个领域的问题。

我们都知道Java程序要运行,需要的是字节码文件(也就是class文件),而每一个字节码文件都是通过一个类编译而来的。开发某个项目,往往需要N个类,从而会编译出N份字节码文件。那么问题来了,开发多个项目总会有一些功能是相同的,总有一些类是共用的(我们假设有100个类)。那么,开发第二个项目能不能使用到第一个项目的某些类,又如何去重复使用呢?

三个项目存在相同功能代码图

其中最SB的方式无非是直接从第一个项目中把需要共用的类直接拷贝出来,并粘贴到第二个项目中,如果第三个项目需要,也可以从第二个项目拷贝到第三个项目中。

为什么说这种方式比较傻呢,因为这种操作存在的问题:第一个,拷贝文件的数量太多,容易拷错文件或者少拷贝几个;第二个,如果第二个项目根据自身特殊的需求把其中共用文件代码修改了,再拷贝给第三个项目的时候,此时第三个项目会不会出问题。问题出现了,我们又该如何去避免这些问题呢。

其实要解决这些问题并不难,那就是对字节码文件做归档操作,这就好比平时我们对多个零散文件做压缩操作一样,压缩之后会生成一个压缩包文件。而这种多个字节码文件的压缩包我们就称之为jar文件,见名知意,jar就是java的归档文件,需要注意的是jar文件中存放的并不是java文件而是一个个的class文件(如下图),我们说过,Java程序要运行只需要字节码文件即可。

把多份字节码文件归档成jar包图

一般的,一个jar包表示一个模块代码的封装,那么一个框架由多个模块组成也就不难理解了,因此,一个框架就可能存在多个jar包。

spring-webmvc.jar文件包含的字节码图

当生成jar包之后,哪一个项目需要使用到这些共用的代码,就只需要在项目中引用相应的jar包就可以了,这个过程就是我们说的拷贝jar包并添加到classpath路径。

项目引用jar包图

推论:使用框架必须先拷贝该框架的jar包

那为什么又说框架是对JDK功能的拓展呢,大家都知道JDK只能开发Java SE的程序,连Servlet程序都开发不了,功能相当有限。有了框架,就好比是在此基础之上继续做开发,这必然是对JDK功能的一种增强,至少使用框架比不使用框架完成相同的一个功能的效率要高很多。就好比A城市到B城市相聚10公里,没有使用框架就好比是跑步过去,使用框架就好比是开车过去,你说哪一种效率比较高?

框架的目的是解决某一个领域的问题,这句话就更好理解了,就好比即将学习的SpringMVC框架就是要解决Web层领域的问题,MyBatis框架就是要解决持久层领域的问题。

最佳实践

说完框架的概念,我们再补充一个概念叫做最佳实践(Best Practice),同样先看看百科的解释。

最佳实践(best practice),是一个管理学概念,认为存在某种技术、方法、过程、活动或机制可以使生产或管理实践的结果达到最优,并减少出错的可能性。

从我们软件开发行业来说,最佳实践就是无数程序员经历过无数次尝试之后,总结出来的处理特定问题的特定方法。说人话就是条条大路通罗马,坐飞机最快、最安全,最佳实践能提高生产效率,从而解放生产力。

而我们在Web开发中的最佳实践,就是根据功能职责划分为控制层、业务层、持久层,这也是人们常说的Java EE的三层架构思想:

  • 控制层 :web/mvc :负责处理与用户界面交互的相关操作
  • 业务层 :service :负责复杂的业务逻辑计算和判断
  • 持久层 :dao :负责将业务逻辑数据进行持久化存储

我们在刚刚说过,不同的框架解决了不同领域的问题,处理控制层比较出名的框架就是SpringMVC和Struts2,持久层的是MyBatis和Hibernate,业务层一般说来就是Spring了。下图表示了Java EE三层架构中不同领域分别的职责,以及不同领域框架的作用范围,通过该图我们会发现Spring确实很霸道,这个话题,我们以后再来慢慢赞美它。

Java EE三层架构图

从图中发现,我们即将学习的SpringMVC框架处于视图层和业务层之间,目的就是和用户界面做交互,具体的职责细节见图中。那么控制层又如何和用户做交互,具体的流程又应该是怎么样的呢?

下一节,我们就来讲讲MVC相关的思想。


猜你喜欢

转载自blog.csdn.net/wolfcode_cn/article/details/80654685