大家家好,我是一名网络怪咖,北漂五年。相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也是经常会问到,SpringBoot是为了简化Spring开发,但是底层仍然是Spring。如果不了解Spring源码,那就更别提SpringBoot源码了,接下来我准备用两个月时间,从基础到源码彻彻底底的学习一遍Spring。

学习框架一定要踏踏实实一步一个脚印的学,很多人都比较喜欢急功近利,选择跳着学,包括我有时候也是,最终会发现你不但节约不了时间,反而会更耗时,而且学着学着很容易放弃。

目录

  • 一、为什么需要学习Spring?
  • 二、Spring官方文档怎么看?
  • 三、Spring和Spring框架的历史
  • 四、Spring设计理念
  • 五、Spring当中的jar包
  • 六、使用未发布版本

一、为什么需要学习Spring?

Spring由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,Spring就是项目从配置到安全,从web应用到大数据——无论应用程序的基础设施需求是什么,都有一个Spring Project来帮助您构建它。从小事开始,只使用您需要的东西——spring在设计上是模块化的Spring框架的控制反转(loC)和依赖注入(DI)特性为一系列广泛的特性和功能提供了基础

只要学习Java就一定会用到Spring,Spring准确来说他更像是一个大家族,家族当中有很多成员,例如Spring FrameworkSpringBootSpringCloudSpring Security…还有很多,具体的可以看官网https://spring.io/projects,Spring Framework就是Spring当中的核心框架,也可以称之为基础框架,任何框架都是和他来做集成。而我们要彻底掌握的也就是Spring Framework

Spring一词在不同的语境中有不同的含义,它可以用来指代Spring Framework项目本身,这是一切开始的地方。随着时间的推移,
其他Spring项目都构建在Spring框架之上。大多数情况下,当人们说“Spring”时,他们指的是整个家族的项目,而并不是Spring Framework

二、Spring官方文档怎么看?

当前spring最稳定的版本是5.3.23,目前仍然在不断的更新迭代!5.3.x是第5代的最后一个特性分支,也是最新的生产线(截至2020年10月的GA),在JDK 8、JDK 11和JDK 17上提供长期支持。下一个大的版本将是6.0.x,JDK版本要求是 JDK 17-21,预计是2022-11-16发布,当然时间上可能有变动。

https://spring.io/projects/spring-framework#learn

三、Spring和Spring框架的历史

Spring出现于2003年,是对早期J2EE规范复杂性的响应。虽然有些人认为Java EESpring的竞争,Spring实际上是对Java EE的补充。Spring编程模型不包含Java EE平台规范;相反,它集成了从EE保护伞中精心挑选的单个规范:

  • Servlet API (JSR 340)
  • WebSocket API (JSR 356)
  • Concurrency Utilities (JSR 236)
  • JSON Binding API (JSR 367)
  • Bean Validation (JSR 303)
  • JPA (JSR 338)
  • JMS (JSR 914)
  • The Spring Framework also supports the Dependency Injection (JSR 330)
  • Common Annotations (JSR 250)

J2EE的全称是Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂家共同制定的工业标准,或者说,它是在SUN公司领导下,多家公司参与共同制定的企业级分布式应用程序开发规范。J2EE是市场上主流的企业级分布式应用平台的解决方案。J2EE本身是一个标准,而不是一个现成的产品(虽然现在有很多符合J2EE标准的产品)。

JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。Spring 还支持基于 JSR-250 的注解,其中包括 @PostConstruct,@PreDestroy 和 @Resource 注解。

四、Spring设计理念

当您了解一个框架时,重要的是不仅要知道它是做什么的,还要知道它遵循什么原则。以下是Spring框架的指导原则:

  • 尽量可以在不更改代码的情况下通过配置切换持久性提供程序。对于许多其他基础设施问题和与第三方api的集成也是如此。
  • 容纳不同的观点。Spring拥抱灵活性,不固执于事情应该如何做。它以不同的视角支持广泛的应用程序需求。
  • 保持强大的向后兼容性。Spring的发展经过了精心的管理,使得版本之间很少有破坏性的更改。Spring支持一系列精心挑选的JDK版本和第三方库,以方便维护依赖于Spring的应用程序和库。
  • 关心API设计。Spring团队花了大量的精力和时间来开发直观的api,使其能够在许多版本和许多年里都适用。
  • 为代码质量设定高标准。Spring框架强调当前的和准确的javadoc非常有意义的。它是极少数能够声称代码结构干净、包之间没有循环依赖关系的项目之一。

五、Spring当中的jar包

官网介绍构件:https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Artifacts

Spring Framework是模块化的,发布了20多个不同的jar,应用程序可以选择需要的模块:

有些模块是相互依赖的。例如,spring-context依赖于spring-beans,而spring-beans又依赖于spring-core。没有必要的外部依赖关系,尽管每个模块都有可选的依赖关系,其中一些依赖关系可能是必需的,这取决于应用程序需要什么功能。beans 和 context是ioc容器的基础核心包!

Spring框架将GA(通用可用性)版本发布到Maven Central,当使用Maven时,Maven会自动搜索它,所以只需将依赖项添加到项目的POM:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.16</version>
</dependency>

关于需要什么依赖直接上mven中央仓库搜索:https://mvnrepository.com/

六、使用未发布版本

Snapshot(快照)、milestone(里程碑)和release (发布候选) 版本被发布到由JFrog托管的Artifactory实例中。这些是并没有上传到maven中央仓库的。

  1. Snapshot 版本代表不稳定、尚处于开发中的版本。
  2. Release 版本则代表稳定的版本。

Snapshot(快照) 如果要使用可以参考如下:

<repository><id>repository.spring.snapshot</id><name>Spring Snapshot Repository</name><url>https://repo.spring.io/snapshot</url>
</repository>...<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.0-SNAPSHOT</version>
</dependency>

Milestones and Release 如果要使用可以参考如下:

<repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.io/milestone</url>
</repository>...<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.0-M2</version>
</dependency>

您还可以针对https://repo.spring.io/release 解析Spring框架构件的GA版本。

Spring学习第1篇:学习spring必备的概念知识相关推荐

  1. Spring学习第3篇:Spring容器的基本使用

    大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...

  2. spring cloud连载第二篇之Spring Cloud Config

    Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...

  3. 【Spring 数据访问终篇】Spring + Hibernate + Mysql

    说来惭愧,数月没有更新博客,今天带来spring访问数据的最终篇,spring + hibernate. 本篇文章将用maven创建一个简答的java项目,并结合spring框架中的hibernate ...

  4. Spring相关文章汇总篇【Spring,SpringBoot,SpringCloud等】

      因为Spring框架包含的组件比较多,写的博客内容也比较多,虽然有分专栏但是依然不方便查找,所以专门用一篇文章来记录相关文章,会不定期更新. 一.Spring 1.基础内容 Spring介绍 Sp ...

  5. Spring学习第4篇:Spring 的依赖注入

    大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...

  6. 精通Spring Boot—— 第二十一篇:Spring Social OAuth 登录简介

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是OAuth OAuth官网介绍是这样的: An open protocol to allow secure auth ...

  7. Spring Cloud第八篇:Spring Cloud Bus刷新配置

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  8. Spring入门到放弃篇(1)- Spring国际化

    Java原生国际化 文档地址 java官方文档 参考官方文档 自定义国际化案例 public class LocaleDemo {public static void main(String[] ar ...

  9. 虚拟化——使用ovirt必备基础概念知识

    作者专注于Java.架构.Linux.小程序.爬虫.自动化等技术. 工作期间含泪整理出一些资料,微信搜索[程序员高手之路],回复 [java][黑客][爬虫][小程序][面试]等关键字免费获取资料.技 ...

最新文章

  1. 全球首个安全有效新冠疫苗:陈薇院士团队研制,登上《柳叶刀》
  2. 调参侠看过来!两个提高深度学习训练效率的绝技
  3. Oracle 10g与安装Perl环境时的冲突以及解决方法
  4. fz响应无法连接到服务器,fz链接不到服务器
  5. Gulp-静态网页模块化
  6. 2017.9.18 HH的项链 思考记录
  7. vs怎么生成html文件,vscode 快速生成html
  8. Vue 过滤器/watch/computed
  9. 金融综合(网课+读书笔记)
  10. 五个部署Hyper-v的常见错误.
  11. 查询结果取交集_MySQL Using intersect 交集
  12. 怎么完全卸载赛门铁克_对顽固程序说不!杀毒软件Symantec赛门铁克清除记
  13. LM2596开关电源 多路开关电源 DC-DC降压电源 固定/可调输出 原理图和PCB
  14. 使用Python将一个excel的某些内容导入到新的excel中
  15. Windows Server 2008之旅??Windows Server Backup功能_闲云野鹤?精神家园_百度空间
  16. 计算机维修主板电容谷包维修,计算机主板维修之电容篇
  17. 阿里开源项目凤凰架构手册,教你如何涅槃般的构建大型分布式系统
  18. C#操作json字符串
  19. 文献综述怎么写 ,一直没头绪写不出来怎么办?
  20. 太酷了!GitHub 开发者自制火星车,教程全面开源!网友:这才是大佬!

热门文章

  1. SSM持久层框架MyBatis,看这一篇就够了
  2. typora中插入emoji表情
  3. 春运抢票靠加速包?试试这个Python开源项目吧
  4. P1152 时区间时间的转换
  5. Mac恶意软件DoK变种 劫持流量并重定向至钓鱼页面 主要攻击瑞士金融机构
  6. 传统Tier1再加码“本土化”,国产供应商如何应对?
  7. 蘑菇街陈琪:投资人的钱不好拿,拿了怎么花
  8. html浏览pdf文件,HTML网页在线预览PDF文件
  9. 计算机毕业设计android的校园快递查询收取寄件app(源码+系统+mysql数据库+Lw文档)
  10. GCOV的使用-测试代码覆盖率