黑豹程序员-架构师学习路线图-百科:Java的第二春Spring框架

文章目录

  • 1、 Spring的发展历史
  • 2、为什么Spring能霸屏?
    • 2.1、容器的设计
    • 2.2、通过四个策略
    • 2.3、三种方式
  • 3、学习编程设计的典范

1、 Spring的发展历史

正当SUN公司的EJB在全球开始热炒时,正当程序员纷纷转型EJB开发时,正当程序员为跑通EJB程序而欢呼雀跃时。
突然一个名不见经传的悉尼大学的音乐学博士Rod Johnson(罗德·约翰逊) 写了一本书。
《Expert One-On-One J2EE Development without EJB》,而书中阐述的一种新的理念,并且形成了基础的代码和案例。
瞬间在软件开发行业引起轰动,正当大家都纷纷要走上EJB的康庄大道时,而且有SUN公司背书,却在这个时候有人敢于挑战EJB,而且竟然还把它按在地上摩擦,而且竟然还真把EJB打败了,EJB本来要躺着就等天上掉钱呢,一夜醒来破产了。

这东西怎么这么厉害,它是谁?这就是今天我们要讲的Spring框架。

Spring是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
在这里插入图片描述

2002年10月,Rod Johnson 撰写的这本书介绍了当时 Java 企业应用程序开发的情况,并指出了 Java EE 和 EJB 组件框架中的存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。

在书中,他展示了如何在不使用 EJB 的情况下构建高质量,可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码。包含许多可重用的 Java 接口和类,如 ApplicationContext和BeanFactory。由于java接口是依赖注入的基本构建块,因此他将这些类的根包命名为com.interface21。在本书发布后不久,开发者 Juergen Hoeller 和 Yann Caroff 说服 Rod Johnson 创建一个基于基础结构代码的开源项目。

2003年2月左右,Rod(罗德)、Juergen(尤尔根) 和 Yann(雅恩) 开始合作开发该项目 。Yann 为新框架创造了“Spring”的名字。这样Spring项目就诞生了。

2003年8月,Spring1.0-m1

2004年3月,Spring1.0,它提供了IoC容器和AOP框架两个核心功能。

2004年8月,Rod Johnson,Juergen Hoeller,Keith Donald 和 Colin Sampaleanu 共同创立了一家专注于 Spring 咨询,培训和支持的公司 interface21。

2006年10月,Spring 2.0版本是一个里程碑式的版本,它引入了很多新的功能,如注解驱动的开发模式、Spring MVC框架、JDBC模板等。

2007年11月,在 Rod 领导下,Interface21公司被更名为 SpringSource。

2007年11月,Spring 2.5

2008年4月,GitHub成立,方便了Spring代码迁移。

2009年8月,SpringSource 以 4.2 亿美元被 VMWare 收购。

2009年12月,Spring 3.0,引入了Java 5的特性支持、REST风格的Web服务支持等。

2012年7月,Rod Johnson 离开了团队。

2013年4月,VMware 和 EMC 通过 GE 投资创建了一家名为 Pivotal 的合资企业。所有的 Spring 应用项目都转移到了 Pivotal。

2012年10月,Mike Youngstrom 在 Spring jira 中创建了一个功能请求,要求在 Spring 框架中支持无容器 Web 应用程序体系结构。这一要求促使了2013年初,Pivotal开始了Spring Boot 项目的研发。

2014年4月,Spring Boot 1.0.0 发布。Spring Boot非常简单,这样以来java开发人员能够快速地采用它。Spring Boot可以说是在 Java 中开发基于 REST 的微服务 Web 应用程序的最快方法之一。

2015年11月,Spring boot 2.0.0 发布。

2017年发布的Spring 5.0版本引入了对响应式编程的支持,并且对Spring框架的核心组件进行了重构和升级,以提高框架的性能和可扩展性。

在这里插入图片描述

2、为什么Spring能霸屏?

2.1、容器的设计

Spring容器的设计非常牛,历史上很多框架很快登顶又很快谢幕。如开启架构的先河的EJB,如表示层的Struts1、Struts2框架,如持久层的Hibernate,哪个当年都是经典中的经典,鼎盛时都雄霸一方,但后期都逐渐消亡。回头看看是什么原因呢?就是它们没有根,它们只是一个产品,它们都是java的依附品,当有新的更好的产品出现,它们只能被替代,最终只能黯然落幕。

而Spring为何能常青呢?
就是它有根。它的根是什么?就是JavaObject对象,写java程序我们都知道,Java万物皆Object。那如果你的Object被绑架,是不是就可以挟天子以令诸侯。对Spring就这么干的,它发明了IoC控制反转,而利于IoC控制反转就形成了对Object控制权。以前我们开发代码要使用java某个类,特别简单,自己创建即可。如:Person p = new Person。而现在不行了,我们必须从容器中获取,如:Person p = getBean(“person”); 这样一旦你使用了Spring框架,再想刷开它单干,就不可能了。

2.2、通过四个策略

Spring做的事情远不这么简单。它进一步的蚕食:

  1. 基于 POJO 的轻量级和最小侵入性编程;
  2. 通过依赖注入 DI 和面向接口松耦合;
  3. 基于切面 AOP 进行声明式编程;
  4. 通过切面和模板(设计模式的)减少样板式代码;

2.3、三种方式

实现上面4个策略的主要是通过三种方式:

  1. 面向 Bean(BOP),形成Bean的容器,需要对象从容器中获取。
  2. 依赖注入(DI),自动注入,开发者特别方便。
  3. 面向切面(AOP),实现无侵入的代码加强。

概念谁不会提呢?每个技术都有,但Spring做的最优,最完美,没有瑕疵,让你不得不爱上它。
EJB不能完全实现业务,查询where不能动态,致命缺点。
Hibernate面向对象,构建复杂,性能降低,并发问题多,采用ONGL晦涩难懂,没法维护,致命BUG满天飞。
Struts1、Struts2 XML配置巨大,手工配置错误百出。
而至今Spring发展20年了,还从未出过一次致命的BUG。不光如此还不断精进,又加宽护城河,推出SpringCloud微服务架构,大型项目必用技术栈。

3、学习编程设计的典范

今天很多人认为学java过气了,其实他根本不懂java的精髓。今天我们更多的是学java栈,甚至学习Spring才是基础核心。

因为Spring是采用Java语言,它的Spring的源码设计优雅、精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果最终想成为一个编程大咖,必须翻阅Spring源码,而这和编程语言无关。这套思想掌握,可以用在其它语言中,C++、Python、go等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js--》简易资金管理系统后台项目实战(后端)

今天开始使用 node vue3 ts搭建一个简易资金管理系统的前后端分离项目,因为前后端分离所以会分两个专栏分别讲解前端与后端的实现,后端项目文章讲解可参考:前端链接,我会在前后端的两类专栏的最后一篇文章中会将项目代码开源到我…

vulnhub靶机Funbox11

下载地址:Funbox: Scriptkiddie ~ VulnHub 主机发现 arp-scan -l 目标192.168.21.164 端口扫描 nmap --min-rate 1000 -p- 192.168.21.164 端口好多处理一下吧 nmap --min-rate 1000 -p- 192.168.21.164 |grep open |awk -F / {print $1} |tr \n , 端口服务版本…

冰蝎默认加密的流量解密

破解冰蝎的默认加密 流量包分析 上传的冰蝎流量包 POST /web-zh/DVWA/vulnerabilities/upload/ HTTP/1.1 Host: 192.168.197.111 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0 Accept: text/html,application/xhtmlxml,a…

文件读取结束的判定

大家好啊,我们今天来补充文件操作的读取结束的判定。 被错误使用的feof 牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾…

ArcGIS笔记9_数据源缺少空间参考信息?如何定义坐标系?

本文目录 前言Step 1 确定好要赋予给目标文件的恰当坐标系Step 2 定义坐标系 前言 有时从其他软件转换得到了shp文件,拖到ArcGIS后却出现“未知的空间参考:添加的数据源缺少空间参考信息 不能投影”的提示,如下图所示: 这种情况就…

图详解第六篇:多源最短路径--Floyd-Warshall算法(完结篇)

文章目录 多源最短路径--Floyd-Warshall算法1. 算法思想2. dist数组和pPath数组的变化3. 代码实现4. 测试观察5. 源码 前面的两篇文章我们学习了两个求解单源最短路径的算法——Dijkstra算法和Bellman-Ford算法 这两个算法都是用来求解图的单源最短路径的算法,区别在…

Rclone连接Onedrive

一、Rclone介绍 Rclone是一款的命令行工具,支持在不同对象存储、网盘间同步、上传、下载数据。 我们这里连接的onedrive,其他网盘请查看官方文档。 注意: 需要先在Windows下配置好了,然后再将rclone配置文件复制到Linux的rclone配…

【编解码】解码字符串中的 UNICODE 字符

前言 由于前后端交互中编码的问题,出现了这样的一串字符: {"share_names":["\u4e2d\u6587\u8def\u5f84"]}出现了unicode编码作为字符串内容的情况,直接用json解析的话会报错,所以在json解析前需要先进行转码…

每日刷题|贪心算法初识

食用指南:本文为作者刷题中认为有必要记录的题目 推荐专栏:每日刷题 ♈️今日夜电波:悬溺—葛东琪 0:34 ━━━━━━️💟──────── 3:17 &#x1f…

[ROS2系列] ORBBEC(奥比中光)AstraPro相机在ROS2进行rtabmap 3D建图

目录 背景: 一、驱动AstraPro摄像头 二、安装rtabmap error1:缺包 三、尝试 四、参数讲解 五、运行 error2: Did not receive data since 5 seconds! 六、效果​编辑 error4: 背景: 1、设备:pc;jeston agx …

使用VGG框架实现从二分类到多分类

一.数据集的准备 与之前的不同,这一次我们不使用开源数据集,而是自己来制作数据集。重点需要解决的问题是对数据进行预处理,如每一个图片的大小均不同,需要进行resize,还需要对每一张图片打标签等操作。 数据集文件 …

【Netty专题】【网络编程】从OSI、TCP/IP网络模型开始到BIO、NIO(Netty前置知识)

目录 前言前置知识一、计算机网络体系结构二、TCP/IP协议族2.1 简介*2.2 TCP/IP网络传输中的数据2.3 地址和端口号2.4 小总结 三、TCP/UDP特性3.1 TCP特性TCP 3次握手TCP 4次挥手TCP头部结构体 3.2 UDP特性 四、总结 课程内容一、网络通信编程基础知识1.1 什么是Socket1.2 长连…

微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题

本心、输入输出、结果 文章目录 微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题前言微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题完整的更新日志[Windows 中的 Copilot][开始菜单][任务栏搜索][设置] 已知问…

面向对象设计原则之依赖倒置原则

目录 定义原始定义进一步的理解 作用实现方法代码示例 面向对象设计原则之开-闭原则 面向对象设计原则之里式替换原则 面向对象设计原则之依赖倒置原则 面向对象设计原则之单一职责原则 定义 依赖倒置原则(Dependence Inversion Principle)&#xff0c…

【广州华锐互动】全屋智能家电VR虚拟仿真演示系统

在过去的几年中,智能家居的概念已经逐渐进入人们的生活。然而,它的真正潜力和最终形态可能还未被完全发掘。一种新兴的技术,虚拟现实(VR),为我们提供了一种全新的方式来理解和体验智能家居。VR公司广州华锐…

FFT64点傅里叶变换verilog蝶形运算,代码和视频

名称:FFT64点verilog傅里叶变换 软件:Quartus 语言:Verilog 代码功能: 使用verilog代码实现64点FFT变换,使用蝶形运算实现傅里叶变换 演示视频:http://www.hdlcode.com/index.php?mhome&cView&…

STM32F4X之GPIO

一、GPIO概述 主控芯片信息如下: 主频:168MHZ内核:ARM-M4FLASH:1MSRAM:192KB引脚:100GPIO:82电压:1.8~3.6V 1.1GPIO概念及其作用 GPIO概念:通用输入输出(General Purpose Input Output),主要作用…

How to add a jar to a project in eclipse?

Project -> Properties -> Java Build Path -> Libraries -> Add External JARs

前端多媒体处理工具——ffmpeg的使用

写在前面 在前端领域,FFmpeg 是一个非常有用的工具,它提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率切换等。可以在多种操作系统安装使用。 安装 下载FFmpeg 在网…

免费Scrum管理工具-Leangoo领歌

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 
 Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速…