3大框架Struts、Hibernate、Spring简单了解

3大框架:Struts、Hibernate、Spring

  1. 基本概念:Spring/Struts/Hibernate是干嘛用的?
  2. 三个框架产生的技术历史背景
  3. 学习前首先应该掌握的基础知识
  4. 学习一个开发框架的基本方法
  5. 如何学习Spring框架
  6. 如何学习ORM框架
  7. 如何学习MVC框架

第一部分:基本概念

首先我们应该了解这三个框架分别是做什么的,在Java开发中具有什么样的作用,对于理清楚框架中具体的知识点是大有裨益的。

1. Spring:DI/AOP

Spring对应的关键词是DI(依赖注入)与AOP(面向切面编程),可以认为是一个以DI和AOP为核心Java Web一站式的集成(粘合)框架。

其中DI也称为IoC(控制发转)用于管理Java对象之间的依赖关系(一定要说DI是IoC实现方式的童鞋们见评论区),AOP用于解耦业务代码和公共服务代码(如日志,安全,事务等)。DI和AOP能够让代码更加简单,具有良好的松耦合特性和可测试性,极大地简化开发。理解这两者是使用Spring框架的基础。

Spring框架对Java企业应用开发中的各类通用问题都进行了良好的抽象,因此也能够把应用各个层次所涉及的特定的功能和开发框架(如接下来要说的MVC框架、ORM框架)方便得组合到一起(这也得益于依赖注入和面向切面编程带来的强大功能)。Spring是一个极其优秀的一站式的Full-Stack集成框架,因此基于Spring核心,对Java应用开发中的各类通用问题几乎都提供了针对性的开发框架,比如你耳熟能详(如果你对这个问题感兴趣的话)的Spring MVC,Spring Data。

Java曾经有另外一个类似的一站式框架粘合框架Seam,这是Hibernate的作者、脾气火爆的大神Gavin King的作品,核心是基于依赖注入来黏合JSF和EJB,不过推出时Spring已经大杀四方,Seam基本已经退出历史舞台了。记得Seam提过一个我认为很不错的概念:“双向注入”,类似现在前端框架中的双向绑定,当时来说还是很超前的。

2. Struts:MVC

Struts是一个Java Web MVC开发框架。MVC早在1978年就作为Smalltalk的一种设计模式被提出来了,引用到Web应用中来时:

  • 模型Model用于封装与业务逻辑相关的数据和数据处理方法
  • 视图View是数据的HTML展现
  • 控制器Controller负责响应请求,协调Model和View

Model,View和Controller的分开,是一种典型的关注点分离的思想,不仅使得代码复用性和组织性更好,使得Web应用的配置性和灵活性更好。

MVC开发模式下,Java Web开发会遇到URL路由、模板渲染、表单绑定/提交/验证、Session封装、权限验证、国际化等一系列通用的问题,而MVC框架会将这些通用问题都封装进框架中,你在应用中根据自己的场景进行简单的配置和编码即可,MVC框架就能帮你处理好一切,可以极大地简化代码。

看到“MVC框架会帮你处理好一切”,不知你是否知道这句著名的话(印象中出自GoF?):不要调用我,我会调用你。再扯远一点,这其实是依赖注入(DI)/控制反转(IoC)概念的最初来源啊,去看看Martin Fowler的博客就知道了:)。

Struts曾经是最流行的Java Web MVC框架,现在常见的选择是Spring MVC。

3. Hibernate:ORM

Hibernate是一个Java ORM开发框架

ORM是Object Relation Mapping的缩写,顾名思义,即对象关系映射。

ORM是一种以面向对象的方式来进行数据库操作的技术。Web开发中常用的语言,都会有对应的ORM框架。而Hibernate就是Java开发中一种常用ORM框架,另一个现在流行的ORM框架是Mybatis

为什么需要ORM框架?

简单地理解,通过Java进行数据库访问的正常流程可以分为以下几步:

  1. 准备好SQL语句
  2. 调用JDBC的API传入SQL语句,设置参数
  3. 解析JDBC返回的结果

这个过程实际上非常麻烦,比如:

  • 在Java代码中拼接SQL非常麻烦,而且易于出错
  • JDBC的代码调用有很多重复性的代码
  • 从JDBC返回的结果转换成领域模型的Java对象很繁琐

而使用ORM框架,则可以让我们用面向对象的方式来操作数据库,比如通过一个简单的函数调用就完成上面整个流程,直接返回映射为Java对象的结果。这个流程中很大一部分工作其实可以交给ORM自动化地帮我们执行。对,类似MVC框架,ORM框架会帮你处理好相关的繁琐事情!

第二部分. 三个框架产生的技术历史背景

SSH是Java Web开发的技术框架,我们简单回顾一下Web应用的发展。

1991年Web页面在Internet上的首次登场,最早Web主要被一帮科学家们用来共享和传递信息,浏览器中主要展现的是静态的文本或图像信息。不过大家很快就不仅仅满足于访问放在Web服务器上的静态文件,1993年CGI(Common Gateway Interface)出现了,CGI定义了Web服务器与外部应用程序之间的通信接口标准,因此Web服务器可以通过CGI执行外部程序,让外部程序根据不同的Web请求生成动态内容。而在Java Web开发中的Servlet,其原理与CGI是类似的。

那个时候编写CGI程序的主要是Perl和C等语言,在程序中输出大片的HTML字符串,可读性和维护性是个大问题。为了处理更复杂的应用,一种方法是把HTML页面中固定的部分存起来(称之为模版),把动态部分打上标记,处理Web请求时,后端程序生成动态的内容然后填充进到模板中去,形成最终返回的HTML。于是1994年PHP诞生了,PHP可以把程序(动态内容)嵌入到HTML(模版)中,不仅能更好的组织Web应用的内容,而且执行效率比CGI还更高。之后96年出现的ASP和98年出现的JSP本质上也都可以看成是一种支持某种脚本语言编程(分别是VB和Java)的模版引擎。

Web开发脚本语言,搭配上后端数据库技术,Web开始大杀四方,类似电子商务系统这样的复杂应用也开始出现在互联网上。如第一部分所述,这时MVC的概念被引入到Web开发中来了。这时一个典型的Java Web应用从架构上看起来应该是这个样子:

  1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
  2. Controller(Servlet)调用核心业务逻辑——Model部分
  3. Model进行数据库存取操作,并将操作结果返回给Model
  4. Controller(Servlet)将业务逻辑处理结果交给View(JSP),动态输出HTML内容
  5. 动态生成的HTML内容返回到浏览器显示

接下来就该MVC框架(以Spring MVC为例)和ORM粉墨登场了:


Spring MVC提供了一个DispacherServlet(可以Spring MVC是以Servlet技术为基础的),这个Servlet把Web应用中Servlet中经常要实现的功能封装起来并提供一层公共抽象,想象对应于一个Web请求后端要做的事情,比如:

  • URL映射(对应HTTP URL和方法,应该调用什么代码)
  • 权限验证(当前的URL是否允许当前用户访问)
  • 参数解析(如何从Servlet中获得参数)
  • 数据绑定(如何将Servlet中的参数,绑定到业务逻辑对象中)
  • 数据验证(判断数据是否符合业务规则,比如邮件格式是否正确)
  • 视图解析(使用哪个视图模板进行渲染)
  • 模型传递与视图渲染(将数据传递给模板,并且在模板中引用)
  • ...

有了Spring MVC,你只需写简单的POJO代码(如图所示,用POJO实现Controller),或者实现Spring MVC给你提供的接口(比如实现Interceptor做权限判断),就能完成这些繁琐的功能。

POJO是Plain Old Java Object的缩写,是软件开发大师Martin Fowler提出的一个概念,指的是一个普通Java类。也就说,你随便编写一个Java类,就可以称之为POJO。之所以要提出这样一个专门的术语,是为了与基于重量级开发框架的代码相区分,比如EJB,我们编写的类一般都要求符合特定编码规范,实现特定接口、继承特定基类,而POJO则可以说是百无禁忌,灵活方便。

而ORM的作用就非常直观了,无须赘述,如图所示它提供了与数据库操作的一层中间抽象,这样Model的代码自然会更加简单。Spring MVC基本可以帮你屏蔽Servlet的API,ORM则可以帮你屏蔽JDBC的API了,也就是说你在更高的抽象层次上写程序了,更高的抽象层次一般意味着以更符合我们思维的方式来思考,自然效率更高。这事实上是软件技术发展的一个重要驱动力之一。你想想,从汇编语言发展出高级语言,从文件系统发展出数据库,其实本质规律是类似的。

那Spring的作用是什么呢? 看到图中大量的箭头没有?

图中的每一个小方块其实都是大量的Java类来实现,Controller与Model之间,Model与数据访问对象之间的这些箭头,意味这些Java类之间存在大量复杂的依赖关系。Spring的核心功能依赖注入,正是用于管理Java对象之间的依赖关系,所以第一部分我们说Spring是一个一站式的粘合框架,它像神奇的胶水一样,可以以松耦合的方式有机的粘合在一起。那具体怎么做到的呢?后文分解。

回到历史,Web开始大杀四方之时,大型应用在分布式、安全性、事务性等方面的要求进一步催生了J2EE(现在已更名为Java EE)平台在1999年的诞生。但是J2EE的组件技术EJB(Enterprice Java Beans)非常笨重,Spring的初衷是为了替代EJB,让Java EE开发更加简单灵活。它起源于Rod Jahnson 2002年出版的著作《Expert One-on-One J2EE Design and Development》,那本书中分析了Java EE的开发效率和实际性能等方面的问题,从实践和架构的角度探讨了简化开发的原则和方法。以此为基础,他实现了一个名为interface21的轻量级开发框架,成为Spring框架的前身。2004年,Spring正式发布1.0版本,同年Rod Jahnson推出了另一部影响深远的经典著作《Expert one-on-one J2EE Development without EJB》,Spring开始逐步在Java领域流行。现在Spring框架的版本已经演化到了4.x,它已经成为Java开发框架的一种事实标准,对Java EE规范本身也产生了重要影响。比如EJB规范就在发展中逐渐引入了众多Spring框架的优秀特征。

好了,你现在应该可以从更高和更广的技术视野来看待这几个框架了吧。看到一门技术的发规律和发展历程,这是一种技术修养的体现,跟人文修养是类似。但是同时我们也应该具有一定的深度,因为我们往往已经站在比较高的抽象层次,比如今天你写几行代码就能把数据库创建好,增删改查的功能也自动生成好了,但是成为高手需要你对底层的原理机制有更透彻的理解,真正遇到问题的时候才能抽丝剥茧迎刃而解。所以要看第三部分:需要了解的基础知识。

posted @ 2018-11-11 20:57 韦邦杠 阅读(...) 评论(...) 编辑 收藏

3大框架Struts、Hibernate、Spring简单了解相关推荐

  1. Struts hibernate Spring 框架原理

    转自:http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html 原理: 1.通过Configuration().configu ...

  2. [SSH] Eclipse+Struts+Hibernate的简单应用

    在上一次Struts的基础上,整合Hibernate,依然参考网上大神的案例代码,由于版本问题的地方做了修改. Eclipse+Struts地址->点这里 在此基础上,需要用到的相关的版本信息( ...

  3. [转]SpringMVC+Hibernate+Spring 简单的一个整合实例

    原文地址:http://langgufu.iteye.com/blog/2088355 下面开始实例,这个实例的需求是对用户信息进行增删改查.首先创建一个web项目test_ssh,目录结构及需要的J ...

  4. Struts + hibernate +spring课堂笔记

    表间的对应关系: one-to-one csacade属性表示级联操作.表示添加,删除,修改主表记录时,从表是否做相应的操作 none:表示不作级联(默认) delte:表示删除做级联 save-up ...

  5. JSP + Struts + Hibernate + Spring+MySQL+Myeclipse实现固定资产管理系统

    导读:随着计算机信息技术的发展以及对资产.设备的管理科学化.合理化的高要求,利用计算机实现设备及资产的信息化管理已经显得非常重要.固定资产管理系统是一个单位不可缺少的部分.但一直以来人们使用传统的人工 ...

  6. Java 第一大框架:Spring 的 IoC 跟 AOP 雏形如何实现?

    Spring Spring make java more simple: Spring make java more modern: Spring make java more reactive: S ...

  7. Struts,Spring 等开源项目svn 地址

    struts/hibernate/spring 等框架的svn地址 Spring3.0                                https://src.springframewo ...

  8. Struts 2 Spring Hibernate三大框架的执行流程以及原理

    转:http://www.cnblogs.com/System-out-println/p/5974113.html Struts2框架 一.简介 Struts2是一个相当强大的Java Web开源框 ...

  9. java ssh框架 struts spring hibernate 简介

    目录 什么是SSH框架 浅谈Struts 什么是Struts Struts的核心构成 为什么使用Struts 浅谈Hibernate 什么是Hibernate Hibernate的核心构成 浅谈Spr ...

  10. Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架

    Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...

最新文章

  1. python3实现汉字转拼音
  2. Redis进阶- Redisson分布式锁实现原理及源码解析
  3. 转义字符 /r与/n的区别
  4. Autofac之自动装配
  5. 用户空间和内核空间通讯之【Netlink 中】
  6. 两个线程同时从服务器接收消息_Linux高性能服务器处理框架
  7. Windows2008管理---第12章 终端服务器
  8. vue 动态添加路由
  9. VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结...
  10. 游戏文件系统(a11s)
  11. js修改css样式的方法,js如何设置css样式?js修改css样式的方法
  12. cuda 和 cudnn 下载与安装
  13. 安规认证的测试项目(工程师必须知道的知识)
  14. python怎么撤销_python撤销操作
  15. 职场Word使用技巧大全,教你成为职场高手!
  16. NTFS与FAT32区别
  17. TFS2012 权限设置
  18. LaTeX 参考文献的处理
  19. 拆掉思维里的墙读书笔记
  20. 查询数据库表数据量大小

热门文章

  1. python基于给定时间戳生成 未来/过去 前进/倒退 n个时刻的时间戳操作大全(包括秒、分钟、小时、天、星期、月、年)
  2. python实现给定一个列表计数指定数字出现的所有次数
  3. python实现找到给定列表中满足给定和的所有子列表,元素可重复使用
  4. cvCvtPixToPlane cvCvtPlanetoPix
  5. python3扫描_Python3实现TCP端口扫描器
  6. ubuntu 卸载openjdk 安装java8 安装之后提示Command ‘java‘ not found
  7. 基于Java的高校社团管理系统
  8. 生成检测报告在哪_惠检LIMS系统在材料检测行业的应用
  9. java rome,ROME - RSS聚合类库 - 组件类库 - JAVA开源项目 - 开源吧
  10. java图片工具类_Java 下载图片下载文件 工具类