从萌芽到巨人: 揭秘Rod Johnson与Spring框架的故事

news2024/11/28 12:44:14

前言

  在这个充满创意和技术追求的世界中,有一个名为 Spring 的框架,它孕育了无数创新和成功的故事。这是一个关于持续进化和超越自我的故事,一个激励人心的旅程,由一位富有远见的程序员和他的团队引领着。从最初的概念到如今的成熟框架,Spring 经历了无数次变革和改进,最终成为了 Java 开发领域的瑰宝。

  让我们踏上一段不平凡的旅程,穿越时光的长河,见证 Spring 框架从雏形到辉煌的转变。感受到创始人 Rod Johnson 对简化开发的坚持,以及团队不断拓展和改善的努力。与此同时,我们将了解到 Spring 框架如何为我们带来了无限可能和创造力的释放。让我们启程,一起探索 Spring 框架的奇迹!

Rod Johnson

  Rod Johnson 是一位著名的计算机科学家和软件开发专家,曾经在多个知名公司担任 Java 开发和架构师的职位。他是 Spring 框架的创始人之一,也是一位 Java 世界的传奇大师和神级人物。他在领域驱动设计、企业级应用架构和 Java 开发方面有着丰富的经验和深厚的专业知识。更令人吃惊的是在回到软件开发领域之前,他在悉尼大学不仅获得了计算机学位,同时还获得了音乐学学位。

Spring 前身

  在 2002 年之前,企业级 Java 应用程序的开发需要依赖于笨重的 EJB 组件。这些组件过于复杂,难以理解,不方便测试,且使开发过程缓慢和难以维护。在这个时期,Rod Johnson 尝试找到一种更轻量级的方法来开发企业级 Java 应用程序,这种方法应该更加简单、灵活和易于维护。在他的研究中,他提出了一种基于 POJO 的模型,这个模型的核心思想是,应该让业务逻辑代码更加简单,并将它们从容器的繁琐管理中解脱出来。这种基于 POJO 的开发模式为 Spring 框架奠定了基础。

  2002 年,他出版了一本名为《Expert One-on-One J2EE》的书,其中批判了当时流行的 Java EE 和 EJB 技术方案,认为它们过于复杂、臃肿和低效,并提出了一种基于普通 Java 类和依赖注入(DI)的更简单和灵活的解决方案。他在书中提供了一些基础代码,用来实现这种解决方案。由于项目的根包命名为 com.interface21,所以也被称为 interface21,这就是 Spring 的前身。

2003 年:Spring 初版

  在 2003 年 6 月:Rod Johnson 和他的团队在 interface21 基础上开发了一个全新的框架,命名为 Spring。并且基于 Apache 许可版本 2.0 下,发布了 Spring 框架的第一个版本。这个版本提供了 IOC 容器、AOP 支持、JDBC 抽象层等核心功能,使得 Java 开发人员能够更轻松地创建和管理企业级应用程序。

2004 年:Spring 1.0

  在 2004 年 3 月:发布了里程碑的版本 1.0。这个版本集中于提供核心功能,包括 IoC 容器、AOP 支持、JDBC 抽象层和事务管理等功能。此外 Spring 1.x 还提供了基本的 Web 开发支持和与其他框架的集成,如 Hibernate、Struts 的集成支持,还实现了 JMX 和 JMS 等 Java EE 规范。帮助开发人员构建灵活、可扩展的应用程序。Spring 1.x 版本为后续版本的发展奠定了基础。这个版本受到了广泛的关注和欢迎,吸引了越来越多的开发者投入到 Spring 框架的开发和推广中,随后 Spring 发展进入快车道。

2006 年:Spring 2.0

  在 2006 年,Spring 2.0 发布了,标志着 Spring 生态系统的进一步发展。它带来了许多重要的改进和新特性。引入基于注解的配置,简化了配置和管理 Spring 组件,减少了样板代码的编写,提高了开发效率。完全支持 Java 5,并利用其新特性如泛型和枚举类型,使代码更简洁、可读性更强。与 AspectJ 进行集成,提供了更加强大的 AOP 功能。

  引入全新的 Spring MVC 框架,提供灵活且强大的 MVC 架构,支持 RESTful 风格的开发,并集成多种视图技术(如 JSP、FreeMarker、Velocity 等)。还提供了全面的测试支持,包括单元测试、集成测试和功能测试,引入多个测试工具和注解,简化测试过程,提高效率。同时增强对动态语言的支持,如 Groovy 和 Bean Scripting Framework(BSF),开发人员可以使用这些语言编写 Spring 组件和配置,增加了灵活性和可扩展性。

  2.0 版本还扩展了对各种技术和规范的支持,使得 Spring 框架更加灵活和易于集成到不同的环境中。同年,Spring 还获得了 Jolt 生产力奖 和 JAX 创新奖。奠定了 Spring 在企业应用开发中的地位。

2007 年:Spring 2.5

  在 2007 年,Spring 框架正式更名为 SpringSource,并发布了 2.5 版本。这个版本提供了对 Java 6 和 Java EE 5 的全面支持,包括对 JDBC 4.0、JTA 1.1、JavaMail 1.4 和 JAX-WS 2.0 的支持。其中一个重要改进是,引入了注解驱动的配置方式,通过使用注解来配置和管理 Spring 应用程序,使得配置变得更加简洁和易读。同时还引入了 Spring MVC 注解控制器,支持 Servlet 和 Portlet 环境下的 Spring MVC,简化了 Web 应用程序的开发。这些新特性进一步提升了 Spring 框架的开发效率和易用性。

2009 年:Spring 3.0

  在 2009 年,SpringSource 被 VMware 收购,这进一步加强了 Spring 框架的实力和影响力。同年,Spring 框架发布了 3.0 版本,引入了对 Java 6 的支持,充分利用了 Java 语言的新特性。此外,3.0 版本还引入了表达式语言(SpEL)和对 RESTful Web 服务的支持,为开发者提供了更多的灵活性和选择。

2011 年:Spring 3.1

  在 2011 年,随着 Spring 框架的持续发展,SpringSource 更名为 VMware vFabric,以更好地突出其在云计算和虚拟化领域的重要性。与此同时,Spring 框架也发布了 3.1 版本,引入了一系列新特性。其中包括 Java 配置方式,使得开发者可以使用 Java 代码替代 XML 配置,提供了更加类型安全和便捷的配置方式。同时对 Spring MVC 进行了改进,增强了处理异步请求的能力。

  另外,3.1 版本还引入了环境抽象层,允许开发者根据不同的环境进行配置,简化了在不同部署环境中的配置管理。此外,缓存抽象层的引入使得 Spring 应用程序可以更方便地与不同的缓存提供商集成,提升了性能和可扩展性。

2013 年:Spring 4.0

  2013 年,VMware vFabric 更名为 Pivotal,这标志着 Spring 框架的发展进入了新的阶段。同时,Spring 框架也发布了 4.0 版本,引入了一些重要的新功能。其中包括对 Java 8 的支持,使得开发者可以充分利用 Java 8 的新特性来开发 Spring 应用程序。另外,4.0 版本还引入了泛型依赖注入,提供了更好的类型安全和代码重用性。此外,WebSockets 的支持使得 Spring 应用程序可以轻松地构建实时通信和推送功能。

2016 年:Spring 5.0

  2016 年,Pivotal 发布了 Spring 框架的 5.0 版本,这是一个里程碑式的发布。5.0 版本引入了对响应式编程模型的支持,通过整合 Project Reactor 和 Reactive Streams 等技术,使得开发者能够构建基于事件驱动和非阻塞的应用程序,提供更高的吞吐量和更低的资源消耗。

  此外,5.0 版本还增加了对 JUnit 5 的支持,JUnit 是 Java 开发中最流行的单元测试框架之一,它提供了更丰富的测试功能和更好的扩展性。通过与 Spring 框架的集成,开发者可以更方便地编写和执行单元测试,确保代码的质量和可靠性。

2022 年:Spring 6.0

  2022 年,Pivotal 发布了 Spring 框架的 6.0 版本,这是一个重要的里程碑。6.0 版本基于 Java 17+,采用了最新的 Java 版本,带来了更强大的性能和功能。同时,Spring 框架迁移到了 Jakarta EE 9+的命名空间,与最新的 Java EE 标准保持一致,提供了更好的兼容性和扩展性。

  此外,6.0 版本,还支持 AOT 处理、Spring Observability。同时提高性能和可伸缩性、减少内存占用、提升安全性以及更灵活和可扩展的架构。这些新功能可以帮助开发人员构建更高效、可扩展和安全的应用程序。总体而言,这使得开发者能够充分利用最新的技术和标准,构建更高效和可靠的企业级应用程序。Spring 框架的 6.0 版本展示了其持续创新和发展的态势,为开发者提供了更多的选择和可能性。

总结

  这些里程碑事件展示了 Spring 框架的演进历程,从最初的概念到成为广受欢迎的 Java 开发框架。它的成功得益于其创新的理念、灵活的架构和持续的改进。每个版本的发布都为我们提供了更多的功能和便利,使得企业级应用开发更加高效和可维护。Spring 框架的发展仍在继续,不断地适应新的技术和需求,为我们提供极致的开发体验。

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue3+TS项目】硅谷甄选day02--后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。 1.1 环境准备 n…

存储系统及主存储器

存储器概述 分类 存储器的分类如下: 主存的分类: 主存分为随机存储器(RAM)和静态存储器(RAM),随机存储器又分为静态RAM和动态RAM 存储器的层次结构 金字塔结构 主存-辅存及主存-缓存结构 …

CentOS安装MySQL5.7/8.0

CentOS安装MySQL 0. 官方教程1. 添加MySQL Yum存储库1.1 官网下载yum存储库1.2 本地安装存储库 2. 安装MySQL数据库2.1 安装MySQL5.72.2 安装MySQL8.0 3. 开启并设置MySQL服务自启动4. 修改数据库root用户密码5. 设置root用户远程连接数据库【可选】 0. 官方教程 官网教程链接…

用xshell把本地的文件夹传入服务器中,在两个服务器之间互传文件夹

两个服务器之间互传文件 假设有两个服务器A和B,现在你需要把A里面的东西传入B里面。 进入B服务器,如你想把A服务器中/root/one/unet放在B服务器中root/ww下,输入以下命令 scp -r -P YYY rootXX.XX.XXX.XX:/root/one/unet root/ww其中YY是你…

深度异常检测入门

异常检测定义 Anomaly detection。异常检测是对与标准行为或模式显著不同的罕见事件、项目或可疑观察的识别。异常也被称为异常值、噪声、偏差等。 对于异常的理解: 异常不一定是无用的,部分异常对数据挖掘领域有较大的价值不同的场景下,异…

CHATGPT的前世今生

ChatGPT是一款基于GPT(Generative Pre-trained Transformer)模型的聊天机器人,它的前世今生充满着令人惊叹的故事。在这篇文章中,我们将深入探讨ChatGPT的诞生、发展和未来。 一、ChatGPT的起源 ChatGPT是由OpenAI团队开发的一款…

夏驰和徐策的解决数学问题思路之——数学归纳法

前言: 今天在复习概率论1.2.3 事件的概率及其性质中证明性质2有限可加性中运用到了数学归纳法,我对数学归纳法早有听闻,但是一直不知道怎么用这个方法,其实数学归纳法早在高中我们就已经接触到了在人教版教材选修2中就有这个方法…

ChatGPT 3.5 API的调用不全指南(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 最近更新时间:2023.5.17 最早更新时间:2023.5.17 关于怎么才能上ChatGPT、怎么才能获取API额度等等信息,建议直接见我的medium账号。 因为这不是能在内网发的内容。 本文不涉及相关网络问题。 我本来想靠问…

【云原生|Kubernetes】03-Pod详解

【云原生|Kubernetes】03-Pod详解 文章目录 【云原生|Kubernetes】03-Pod详解前言Pod解析Pod简介Pod的组成Pod中的几种容器的概念Pause容器初始化容器主容器伴随容器容器的启动顺序容器与pod与node的关系 Pod种类普通Pod静态pod静态Pod创建方式配置文件方式http方式 Job PodCro…

Debian11之 K3s 部署 K8S 集群

K3S 架构方案 Server 节点指的是运行 k3s server 命令的主机,control plane 和数据存储组件由 K3s 管理Agent 节点指的是运行 k3s agent 命令的主机,不具有任何数据存储或 control plane 组件Server 和 Agent 都运行 kubelet、容器运行时和 CNI 基于 …

ESP32C3之PlatformIO IDE开发环境

一、下载​​platformio ide扩展 在vscode里面直接搜索​​platformio ide,点击安装即可 二、新建esp32c3工程 2.1 首先点击小蚂蚁的图标,然后点击pio home 2.2 点击projects->create New Project 2.3 填写工程名和工程路径:勾选钩表示默认路径&a…

Kubernetes第1天

第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物…

Redis学习---02

一、Redis基础知识 (1)redis默认有16个数据库;默认使用的是第0个数据库;切换数据库: select index 获取数据库中的值大小:dbsize (2):查看所有的key (3):清空当前数据库:flushdb (4)清空所有的数据库:flu…

LCD1602液晶显示模块

1.认识LCD1602 1、概述: LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602,32个 字符(16列两行)。是我们接触引脚最多的模块。LCD1602我们的非标准协议(标准协议有IIC、IIS、SPI&…

利用暴力攻击破解登陆密码

长久以来,入侵远程计算机系统的工具和技术并没有发生翻天覆地的变化。例如,在许多情况下,普通用户只要知道了相关密码,就能立刻变身为管理员。虽然这些情形听起来不够曲折,但在大多数情况下,暴力攻击是通过…

Kubernetes第3天

第五章 Pod详解 本章节将详细介绍Pod资源的各种配置(yaml)和原理。 Pod介绍 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个…

JavaScript实现水印效果

效果 实现思路 利用canvas绘制出文字将canvas作为遮罩层背景图, 将背景x轴和y轴重复 实现步骤 动态生成canvas并画出文字 const canvas document.createElement("canvas"); canvas.width len * fontSize; // canvas宽度, 目前是根据文字长度和大小来调整的, 自…

Postman调试依赖登录接口的3种方法

在接口测试种, 我们经常会遇到有些接口登录后才能访问.我们在使用Postman调试这种接口时一般有3种方法: 1.依次请求 如果有登录接口的文档,或者通过抓包比较容易抓出登录请求的参数和格式,可以先使用Postman请求一下登录接口,这时Cookies会存到本地(可以通过Postman Cookies管理…

JVM学习(十一):对象的实例化内存布局与访问定位

目录 一、对象的实例化 1.1 创建对象的方式 1.2 创建对象的步骤 二、对象的内存布局 2.1 对象头 2.1.1 运行时元数据(Mark Word) 2.1.2 典型指针 2.2 实例数据(Instance Data) 2.3 对齐填充(Padding&#…

一个奇葩的网络问题,把技术砖家“搞蒙了“

问题现象 客户反馈有一个server端S, 两个client端C1, C2, S的iptables规则对C1, C2都是放通的,但是C2无法连接上S,客户很着急,催我们尽快解决。 这里解释一下,iptables规则是防火墙规则,是linux系统实现防…