Spring学习第1篇:学习spring必备的概念知识

news2024/11/22 10:17:24

       大家家好,我是一名网络怪咖,北漂五年。相信大家和我一样,都有一个大厂梦,作为一名资深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版本。

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

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

相关文章

纸牌博弈问题

纸牌博弈问题 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;纸牌博弈问题 CSDN&#xff1a;纸牌博弈问题 题目描述 有一个整型数组 A&#xff0c;代表数值不同的纸牌排成一条线。玩家 a 和玩家 b 依次拿走每张纸牌&#xff0c; 规定玩家 a 先拿&#xff…

win11开机音效设置的方法

微软为win11重做了开机音效&#xff0c;与我们一直以来使用的开机音效不太一样&#xff0c;听起来很不舒服&#xff0c;因此我们可以通过设置开机音效的方法来修改它&#xff0c;只要在个性化设置中就可以找到了&#xff0c;下面一起来试试看吧。 win11开机音效怎么设置&#…

wordpress图片压缩插件-免费批量wordpress图片压缩

wordpress图片压缩插件&#xff0c;相信每个人都知道图片的太大会影响到网站的加载速度。过多的图像会对服务器产生相应的压力。导致网站打开会越来越慢。而图片也是会被搜索引擎收录的&#xff0c;可以在百度图片里面能搜索的到&#xff0c;也算是增加了网站的宣传力度。今天给…

(附源码)计算机毕业设计SSM基于微信平台的匿名电子投票系统

&#xff08;附源码&#xff09;计算机毕业设计SSM基于微信平台的匿名电子投票系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

【微信小程序支付功能】uniapp实现微信小程序支付功能

支付实现流程 首先前端写一个页面&#xff0c;简单说就是有一个输入支付金额的 然后有一个按钮&#xff0c;点击可以支付。 点击按钮后触发支付方法&#xff0c;就是我下面写的这些代码&#xff0c;复制就可以了。 然后先请求后端的一个方法&#xff0c;把你的价格还有openid之…

在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件

轮播图左右的切换按钮、如果点击没有反应&#xff0c;控制台也没有报错。很大可能是版本问题。如果不指定版本信息、默认安装的是最新的版本。版本过高或者过低都有可能导致无效。目前兼容性和稳定性比较好的是&#xff1a;5.4.5。 官网地址&#xff1a;https://www.swiper.com…

【隧道应用-1】netsh端口映射内网

1、端口映射 是指将一台主机的内网&#xff08;LAN&#xff09;IP 地址映射成一个公网&#xff08;WAN&#xff09;IP 地址&#xff0c;当用户访问提供映射端口主机的某个端口时&#xff0c;服务器将请求转移到本地局域内部提供这种特定服务的主机&#xff1b;利用端口映射功能…

猿创征文|程序员的浪漫(代码猜诗词)

✅作者简介&#xff1a; 全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云享专家博主&#xff0c;掘金后端评审团成员&#xff0c; &#x1f495;前言&#xff1a;在大众的认知里&#xff0c;程序员只是一群坐在电脑前熬夜敲代码的…

webrtc 笔记

webrtc主要步骤 navigator.mediaDevices.getUserMedia({audio:true,redio:true}) 获取用户的摄像头状态,返回媒体流,把媒体流赋给video的srcObject属性,就能在页面上展示自己的音视频 let peer new RTCPeerConnection(servers) 创建peer实例,通过这个实例的一系列方法实现p2p…

vue3 :一个实用的 vite + vue3 组件库脚手架工具

目录 1 组件库脚手架内容 2 组件库脚手架技术栈 3 使用说明 3.1 克隆代码到本地 3.2 安装依赖 3.3 本地开发 3.4 创建新组件 3.5 构建文档 3.6 构建 example 3.7 发布组件库 4 组件库命令说明 无论是 vue2 全家桶还是 vue3 vite TypeScript&#xff0c;组件库的使…

无需购买服务器,用cpolar发布本地web网站

随着互联网的快速发展&#xff0c;网络也成为我们生活中不可缺少的必要条件&#xff0c;为了能在互联网世界中有自己的一片天地&#xff0c;建立一个属于自己的网页就成为很多人的选择。但互联网行业作为资本密集的行业&#xff0c;委托别人建立一个像样的网站要花费不少&#…

一文搞定基因型数据清洗

文章目录数据1 二进制文件2. plink二进制文件变为文本文件&#xff08;ped和map&#xff09;3. plink将vcf转化为plink文件4. 提取样本和SNP4.1 提取样本4.2 提取SNP5. plink和表型数据合并6. 数据汇总6.1 次等位基因频率&#xff08;maf&#xff09;6.2 缺失6.3 哈温检测6.4 杂…

JDBC-01:如何获取数据库连接

文章目录初步了解jdbcJDBC程序编写步骤Driver接口介绍导入驱动&#xff08;idea&#xff09;加载与注册JDBC驱动要素一&#xff1a;URL要素二&#xff1a;用户名和密码获取数据库连接获取数据库连接的方式一获取数据库连接的方式二获取数据库连接的方式三获取数据库连接的方式四…

FreeRTOS移植STM32 printf()函数重定向到USART3

我们在移植FreeRTOS过程中如果没有printf()函数打印调试信息到串口精灵&#xff0c;则程序开发就会非常不方便。本文实现STM32工程上的printf()函数&#xff0c;方便用于程序开发中调试信息打印到电脑上的串口调试精灵。 最简单的方法就是使用MicroLIB库。 一、KEIL-MDK中勾选U…

字体管理工具 - RightFont使用教程

RightFont RightFont是 Mac OS X 上一款非常轻巧的字体管理工具&#xff0c;目前已经完成了与 PhotoShop、Sketch 两大设计应用的集成。RightFont 是 Mac系统上一款优秀的字体管理工具&#xff0c;专为设计师设计&#xff0c;轻量化和简洁&#xff0c;可以方便快速的管理你的字…

《C陷阱与缺陷》读书笔记1

词法分析&#xff1a;贪心法 主要就是解释词法分析时的原则&#xff0c;即&#xff1a; 编译器将程序分解为符号时&#xff0c;从左到右一个字符接一个字符的读入。如果编译器的输入流截止至某个字符之前都已经被分解为一个个符号&#xff0c;那么下一个符号将包括从该字符之…

Linux文件锁的使用

文件是一种共享资源,多个进程对同一文件进行操作的时候,必然涉及到竞争状态&#xff0c;因此引入了文件锁实现对共享资源的访问进行保护的机制&#xff0c;通过对文件上锁&#xff0c; 来避免访问共享资源产生竞争 状态。 一、文件锁的分类 1.建议性锁 建议性锁本质上是一种协…

Java并发编程——Threadlocal源码解析

Threadlocal源码解析一、基本结构二、ThreadLocal操作set操作get操作remove操作三、内存泄露&#xff1f;四、ThreadLocalMap核心变量数组下标计算方式阈值计算扩容下标冲突&#xff08;hash冲突&#xff09;从名称上来看可以理解为线程本地变量&#xff0c;也可以认为是线程局…

(JAVA)认识Java中的数据类型和变量

文章目录前言1.字面常量2. 数据类型3.变量3.1 变量概念3.2 语法格式3.3 整形变量3.4 浮点型变量3.5 字符型变量3.6布尔类型变量3.7 类型转换3.7.1 隐式转换&#xff08;自动类型转换&#xff09;3.7.2 显示转换 &#xff08;强制类型转换&#xff09;3.8 类型提升4. 字符串类型…

驱动开发:内核层InlineHook挂钩函数

在上一章《驱动开发&#xff1a;内核LDE64引擎计算汇编长度》中&#xff0c;LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度&#xff0c;本章将在此基础之上实现内联函数挂钩&#xff0c;内核中的InlineHook函数挂钩其实与应用层一致&#xff0c;都是使用劫持执行流并跳…