大家家好,我是一名网络怪咖,北漂五年。相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也是经常会问到,SpringBoot是为了简化Spring开发,但是底层仍然是Spring。如果不了解Spring源码,那就更别提SpringBoot源码了,接下来我准备用两个月时间,从基础到源码彻彻底底的学习一遍Spring。
学习框架一定要踏踏实实一步一个脚印的学,很多人都比较喜欢急功近利,选择跳着学,包括我有时候也是,最终会发现你不但节约不了时间,反而会更耗时,而且学着学着很容易放弃。
Spring
由一个叫Rod Johnson
的程序员在 2002 年最早提出并随后创建,Spring就是项目从配置到安全,从web应用到大数据——无论应用程序的基础设施需求是什么,都有一个Spring Project来帮助您构建它。从小事开始,只使用您需要的东西——spring在设计上是模块化的
。Spring框架的控制反转(loC)和依赖注入(DI)
特性为一系列广泛的特性和功能提供了基础
。
只要学习Java就一定会用到Spring,Spring
准确来说他更像是一个大家族,家族当中有很多成员,例如Spring Framework
、SpringBoot
、SpringCloud
、Spring Security
…还有很多,具体的可以看官网https://spring.io/projects,Spring Framework
就是Spring当中的核心框架,也可以称之为基础框架,任何框架都是和他来做集成。而我们要彻底掌握的也就是Spring Framework
。
Spring一词在不同的语境中有不同的含义,它可以用来指代Spring Framework
项目本身,这是一切开始的地方。随着时间的推移,
其他Spring项目都构建在Spring框架之上。大多数情况下,当人们说“Spring
”时,他们指的是整个家族的项目,而并不是Spring Framework
。
当前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出现于2003
年,是对早期J2EE规范复杂性的响应。虽然有些人认为Java EE
和Spring
的竞争,Spring
实际上是对Java EE
的补充。Spring
编程模型不包含Java EE
平台规范;相反,它集成了从EE保护伞中精心挑选的单个规范:
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框架的指导原则:
官网介绍构件: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.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.3.16version>
dependency>
关于需要什么依赖直接上mven中央仓库搜索:https://mvnrepository.com/
Snapshot(快照)、milestone(里程碑)和release (发布候选) 版本被发布到由JFrog托管的Artifactory实例中。这些是并没有上传到maven中央仓库的。
Snapshot(快照) 如果要使用可以参考如下:
<repository>
<id>repository.spring.snapshotid>
<name>Spring Snapshot Repositoryname>
<url>https://repo.spring.io/snapshoturl>
repository>
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>6.0.0-SNAPSHOTversion>
dependency>
Milestones and Release 如果要使用可以参考如下:
<repository>
<id>repository.spring.milestoneid>
<name>Spring Milestone Repositoryname>
<url>https://repo.spring.io/milestoneurl>
repository>
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>6.0.0-M2version>
dependency>
您还可以针对https://repo.spring.io/release 解析Spring框架构件的GA版本。