初识Spring | 起源篇

822 阅读6分钟

前言

C: 查老师又要开新系列了,这回是 Spring 框架的初始系列。但是由于查老师的时间有限,存稿升级转换又需要不菲的时间,所以本系列采用间隔型更新方式。

由于 Spring 框架对 Java 系开发者有非常非常重要的地位,所以查老师将在本系列开始多一篇起源篇,为的是和大家再好好回顾下那个技术"革命"的时代。

B/S 架构激荡起伏的 30 年中,Java Web开发大致经历了四大阶段。

第一阶段

第一阶段 的开发人员,从 MVC 设计模式的 Model 1 演变到了 Model 2 再演变到了三层架构。

  • MVC 的 Model 1

    • 视图层:JSP,承担数据展示

    • 控制层:JSP,承担路由转发及业务调用

    • 模型层:Java Bean ,承担业务逻辑处理

    JSP 又做数据展示,又负责路由转发及业务调用,"打工人"真苦。

  • MVC 的 Model 2

    • 视图层:JSP,承担数据展示

    • 控制层:Servlet,承担路由转发及业务调用

    • 模型层:Java Bean ,承担业务逻辑处理

    为了做好职能划分,Model 2 中将 JSP 身为控制层的能力交给了 Servlet。( JSP 本质就是 Servlet )

  • 三层架构

    • 表现层

      • 视图层:JSP
      • 控制层:Servlet
    • 业务逻辑层:Service

    • 数据访问层:DAO

    三层架构中,主要是将模型层做了拆分,将业务逻辑和数据库操作代码进行了分离。

第二阶段

第二阶段 的开发人员,主要使用的是 Sun 公司出品的 EJB 框架。

EJB(Enterprise Java Beans,企业 Java Beans)是一个企业级开发框架,它是 Sun 的 JavaEE 服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借 Java 跨平台的优势,用 EJB 技术部署的分布式系统可以不限于特定的平台

由于 IBM 和 Sun Microsystems 等 EJB 提倡者力推其前景,起初一些大公司纷纷采用 EJB 部署他们的系统。然而随后各种问题便接踵而至,对 EJB 的恶评短时间内激增。对于初学者,EJB 的 API 显得太过困难;对于许多程序员来说,书写那些必须抛出特定异常的接口并将 bean 类作为抽象类实现的做法既不直观也不正常。

当然,EJB 所被赋予的使命,如对象关系映射和事务管理确实有其天然复杂性,但其 API 之复杂还是令开发人员们觉得望而却步,一些人开始怀疑 EJB 除了引入了复杂的实现手段以外似乎并未带来什么实际好处。

另外,实际运用中被发现,如果使用 EJB 来封装业务逻辑会带来性能上的下降。这是因为,最早的 EJB 规范只允许客户端通过特定协议(如 CORBA )进行远程方法调用来调用,即使大部分实际应用根本就不需要分布式计算。直到 EJB 2.0 才引入了本地接口,以支持可以开发不通过网络就能直接本地调用的EJB系统。[1]

第三阶段

第三阶段 的开发人员,主要使用的是 Spring 为首的系列框架。

天下苦 EJB 久矣!

Rod Johnson 在 2002 年编著的《Expert one on one J2EE design and development》一书中,对 Java EE 系统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。以此书为指导思想,他编写了 interface21框架,这是一个力图冲破 J2EE 传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。

Spring 框架即以 interface21 框架为基础,经过重新设计,并不断丰富其内涵,于 2004年3月24日,发布了 1.0正式版。同年他又推出了一部堪称经典的力作《Expert one-on-one J2EE Development without EJB》,该书在 Java 世界掀起了轩然大波,不断改变着 Java 开发者程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对 EJB 的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之 。至此一战功成,Rod Johnson 成为一个改变 Java 世界的大师级人物。[2]

与之而来的,还有大量的新型框架诞生,Hibernate、MyBatis等,真是"群英荟萃"啊。

第四阶段

第四阶段 的开发人员,主要使用的是 Spring Boot 为首的系列框架。

随着新技术的发展,脚本语言大行其道的时代(Node JS,Ruby,Groovy,Scala等),Java EE使用Spring逐渐变得笨重起来,大量的XML文件存在与项目中,繁琐的配置,整合第三方框架的配置问题,低下的开发效率和部署效率等等问题,这些问题在不断的社区反馈下,Pivotal 团队也开发出了相应的框架:Spring Boot。[3]

Spring Boot 是由 Pivotal 团队在 2013 年开始研发、2014年4月 发布第一个版本的全新开源的轻量级框架。它基于 Spring4.0 设计,不仅继承了 Spring 框架原有的优秀特性,而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。另外 Spring Boot 通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。[4]

参考文献

[1]王博, 陈莉君. JAVA BEAN的分析和应用[J]. 西安文理学院学报(自然科学版), 2008, 11(1):92-96

[2]Spring 百度百科. 简介[EB/OL]. baike.baidu.com/item/spring…. 2020.12.29

[3]徐刘根. 为什么越来越多的开发者选择使用Spring Boot?[EB/OL]. blog.csdn.net/xlgen157387…. 2016-10-16

[4]邓笑. 基于 Spring Boot 的校园轻博客系统的设计与实现[D]. 湖北:华中科技大学,2018

后记

在 2020 年年初的时候,Jrebel 发布了 《2020年 Java 技术报告》,从来自全球 Java 开发专业人员的近 400 份回复中对 Java 技术生态进行了统计分析。其中在框架技术的分析报告部分,86% 的受访者表示他们使用 Spring 框架。

框架报告

站在 30 年这个"风口"的我们,正在享受着前人"栽树"带来的便利。

查老师有话说: 对于技术的学习,查老师一贯遵循的步骤是:先用最最简单的 demo 让它跑起来,然后学学它的最最常用 API 和 配置让自己能用起来,最后熟练使用的基础上,在空闲时尝试阅读它的源码让自己能够洞彻它的运行机制,部分问题出现的原因,同时借鉴这些技术实现来提升自己的代码高度。

所以在查老师的文章中,前期基本都是小白文,仅仅穿插很少量的源码研究。当然等小白文更新多了,你们还依然喜欢,后期会不定时专门对部分技术的源码进行解析。