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

news2024/11/19 11:27:06

文章目录

  • 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.coloradmin.cn/o/1120570.html

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

相关文章

昇腾CANN 7.0 黑科技:大模型训练性能优化之道

目前,大模型凭借超强的学习能力,已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练,通常具有良好的通用性和泛化性。用户基于“大模型预训练微调”开发范式即可在实际业务场景取…

量子力学期末复习--1

量子力学解题技巧--1 基础知识 薛定谔方程 Ehrenfest 定理 不确定性原理:正则对易关系:自由粒子:对于自由粒子,分离变量解不代表物理上可实现的态。但其含时薛定谔方程的一般解仍旧是分离变量解的线性组合 典型题目 自由粒子…

029-第三代软件开发-加载本地字体库

第三代软件开发-加载本地字体库 文章目录 第三代软件开发-加载本地字体库项目介绍加载本地字体库 关键字: Qt、 Qml、 QFont、 QFontDatabase、 ttf 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Langu…

深圳世有伯乐教育科技有限公司——LJ培训

今天来吐槽一波 深圳世有伯乐教育科技有限公司就是一个垃圾的培训机构,不,说是培训机构都是扭曲事实了,因为它根本就没有国家认可的办学许可证。光说没法让人信服,以下是企查查的截图: 世有伯乐的工商信息图片 续上&…

MPC预测控制概述和C++ 中的模型库

系列续篇: C 中的模型预测路径积分 (MPPI) 控制-CSDN博客 一、说明 以下文章描述了应用模型预测控制器的简单控制系统方法。本文讨论了这种类型的控制的基本机制,该机制适用于各种工程领域。 MPC 涉及对未来系统行为的预测(由一组方程描述的模…

.net6部署到linux上(CentOS Linux 7)

目录 一、先在linux上配置.net环境 添加 Microsoft 包存储库 安装 SDK 安装运行时 检查 SDK 版本可使用终端查看当前安装的 .NET SDK 版本。 打开终端并运行以下命令。 二、创建.net6 mvc项目 并发布 创建项目 修改默认端口 打包发布到文件夹 运行打包项目查看项目是否…

华为OD机试 - 代表团坐车 - 动态规划(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

【vue】vue本地储存、会话存储插件vue-ls的使用:

文章目录 一、安装:二、vue项目中使用:三、API说明: 一、安装: npm install vue-ls -S 或 yarn add vue-ls二、vue项目中使用: //在vue项目中的入口文件main.js中引入import Storage from vue-ls;options {namespac…

DNS和ICMP协议

目录 一、DNS协议 二、ICMP协议 1.ICMP协议 2.ping命令 在讲完了OSI模型每层协议的讲解后,还有一些协议我们需要再讲解一下。 一、DNS协议 DNS是一整套从域名映射到IP地址的系统,也叫做域名解析服务,端口号为53。 我们生活中访问网站都…

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

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

P1950 长方形

题目&#xff1a; P1950 长方形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 算法&#xff1a; dp动态规划 代码&#xff1a; #include<iostream> #include<string> typedef unsigned long long ull; const int N 1010; using namespace std;int r, c, i, …

kali安装nodejs、npm失败

更新apt-get再安装&#xff0c;更新时间比较久&#xff0c;看网速&#xff0c;中间有一些确认步骤 22 apt-get update23 apt-get upgrade24 apt-get install nodejs25 node26 npm27 apt-get install npm

vulnhub靶机Funbox11

下载地址&#xff1a;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 , 端口服务版本…

Openssl数据安全传输平台004:套接字C语言API封装为C++类 / 客户端及服务端代码框架

1. 客户端C API // 客户端 // C API int sckClient_init(); /* 客户端 连接服务器 */ int sckClient_connect(char *ip, int port, int connecttime, int *connfd); /* 客户端 关闭和服务端的连接 */ int sckClient_closeconn(int connfd); /* 客户端 发送报文 */ int sckClie…

1024MSF工具的基本使用(第十五课)

1024MSF工具的基本使用(第十五课) 1 MSF 介绍 MSF&#xff08;Metasploit Framework&#xff09;是一款开源的渗透测试工具&#xff0c;旨在帮助安全专家进行安全测试&#xff0c;评估和漏洞利用。MSF提供了一系列的漏洞利用、Payload以及Post Exploit模块&#xff0c;使得渗…

【经验分享】WSL中使用USB设备

具体步骤&#xff1a; 首先在windows中安装 USBIP 工具&#xff0c;在GitHub上下载安装包并根据README文档的说明进行操作&#xff1a; 下载链接&#xff1a;https://github.com/dorssel/usbipd-win/releases 同时在 WSL Linux 端也需要安装编译内核所需的库和工具&#xff0c…

在 Python 中执行 Shell 命令并获取输出

在本文中&#xff0c;我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。 从 Python 脚本执行 CMD 命令并使用 os.system() 获取输出 我们出于不同目的在命令提示符或任何其…

Rclone连接Onedrive

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

文件读取结束的判定

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

【鸿蒙软件开发】进度条Progress

文章目录 前言一、进度条Progress1.1 创建进度条1.2 进度条样式进度条样式ProgressType.Linear&#xff08;线性样式&#xff09;ProgressType.Ring&#xff08;环形无刻度样式&#xff09;ProgressType.ScaleRing&#xff08;环形有刻度样式&#xff09;ProgressType.Eclipse&…