【Spring】 ——初识Spring

news2024/12/21 18:40:05

 Spring学习思维导图(仅供参考),如有需要可以到我的资源自行下载

目录

一、为什么学Spring🍭

官方解释🧁

 解释🧁

二、Spring是什么🍭

1、核心特点🧁

Ⅰ、控制反转(IoC)和依赖注入(DI)🍬

2、目标🧁

三、Spring的历史🍭

 1、历史由来🧁

2、Spring版本迭代的过程🧁

 四、Spring可以干什么🍭


一、为什么学Spring🍭

官方解释🧁

Spring | Why Spring

解释🧁

1. 广泛应用:Spring框架是Java开发中最广泛应用的框架之一。许多企业和组织都在使用Spring构建他们的应用程序。通过学习Spring,你将掌握一项被业界广泛认可和应用的技能,提高就业竞争力。

2. 简化开发:Spring框架提供了简化和优化Java开发的工具和技术。它采用了约定优于配置的原则,通过提供易于使用的API和开发模型,减少了开发者的工作量和复杂性。学习Spring可以让你更高效地开发应用程序,并提升开发效率。

3. 提高代码质量:Spring框架倡导松耦合、面向接口编程和依赖注入等良好的编程实践。通过使用Spring,你可以编写可测试、可维护和可扩展的代码。它提供了强大的支持和工具,如依赖注入容器、面向切面编程和测试框架等,帮助你编写高质量的代码。

4. 丰富的功能和扩展模块:Spring框架提供了众多的功能和扩展模块,涵盖了各个领域和应用场景。无论是Web开发、数据访问、安全性还是微服务架构,Spring都有相应的解决方案和支持。学习Spring可以让你了解和掌握这些丰富的功能和模块,为不同的开发需求提供最佳的解决方案。

5. 社区和支持:Spring框架拥有庞大的开发者社区和活跃的支持体系。你可以通过官方文档、论坛、博客和社交媒体等渠道获取丰富的学习资源和经验分享。在学习和使用Spring的过程中,你可以与其他开发者交流和互动,共同解决问题和提升技能。

6、 市场占有率也高:

 所以,综上所述,Spring值得我们去学习,更值得我们去好好学!

二、Spring是什么🍭

Spring是一个开源的Java应用框架,它提供了一套全面的解决方案,用于开发企业级Java应用程序。Spring框架旨在简化Java开发,并提供了一种灵活且非侵入式的编程模型,帮助开发人员构建可扩展、模块化和可维护的应用程序。

1、核心特点🧁

Spring框架的核心特点包括:

  1. 轻量级:Spring框架采用了松耦合的设计理念,不强制依赖于特定的容器或服务器,可以灵活地集成到各种环境中。
  2. 非侵入性:Spring框架通过基于接口的编程和依赖注入(DI)的方式,使应用程序代码与框架代码解耦,不需要继承特定的基类或实现特定的接口。
  3. 面向切面编程(AOP):Spring框架提供了对AOP的支持,可以通过配置的方式将横切关注点(如日志、事务管理等)与业务逻辑分离,提高代码的重用性和可维护性。
  4. 控制反转(IoC,Inversion of Control)和依赖注入(DI,Dependency Injection:Spring框架通过IoC容器管理对象的生命周期和依赖关系,将对象的创建和依赖注入交由框架负责,降低了组件之间的耦合度。
  5. 集成多种技术:Spring框架与其他流行的Java技术(如Hibernate、MyBatis、JDBC等)紧密集成,提供了对数据库访问、事务管理、Web开发、消息传递等方面的支持。

Ⅰ、控制反转(IoC)和依赖注入(DI)🍬

我们通常⽤⼀句话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器。

从这句话可以看出Spring框架的核心特点中,最重要的一点是控制反转(IoC)和依赖注入(DI)。这是Spring框架的基石,也是它与传统的编程模型的最大区别。

控制反转(IoC,Inversion of Control意味着将对象的创建和依赖关系的管理交由框架来负责,而不是由开发人员手动管理。传统的编程模型中,开发人员需要自己创建和管理对象的生命周期,导致代码与对象的创建和依赖关系紧密耦合,难以维护和扩展。

依赖注入(DI,Dependency Injection控制反转的一种实现方式,通过将对象的依赖关系注入到对象中,使对象能够获取所需的依赖,而无需自己创建和管理依赖对象。依赖注入通过配置文件或注解的方式,将对象之间的依赖关系描述清楚,并由框架负责解析和注入。

控制反转和依赖注入的好处是解耦和灵活性。它们使得应用程序的各个组件之间的依赖关系变得松散,减少了组件之间的耦合度。开发人员只需关注业务逻辑的实现,而不必担心对象的创建和依赖关系的管理。这样可以使代码更加可读、可维护和可扩展,同时也便于进行单元测试和模块替换。

那知道了loC和DI,总结一下它们有什么区别:

依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽DI 就属于具体的实现。

 什么是容器?

容器是⽤来容纳某种物品的(基本)装置。 ——来⾃:百度百科
我们想想,之前我们接触的容器有哪些?
  • List/Map -> 数据存储容器
  • Tomcat -> Web 容器
既然 Spring 是⼀个 IoC容器,重点应该是在“容器”⼆字上,那么它就具备两个最基础的功能:
  • 将对象存⼊到容器;
  • 从容器中取出对象
所以 Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。

2、目标🧁

Spring框架的目标是提供一个全面而灵活的解决方案,帮助开发者构建可靠、高效和可扩展的企业级应用程序。以下是Spring框架的主要目标:

  1. 简化开发:Spring致力于简化Java开发过程,通过提供易于使用的编程模型和简化的API,减少开发者的工作量和复杂性。
  2. 降低耦合:Spring鼓励松耦合的设计,使各个组件之间的依赖关系更加灵活和可配置。通过控制反转(IoC)和依赖注入(DI)的机制,Spring使对象之间的依赖关系被外部容器管理,提高了代码的可测试性、可维护性和可扩展性。
  3. 提供一致的抽象层:Spring为各种技术和框架提供了一致的抽象层,使开发者能够以统一的方式使用它们。
  4. 提高应用性能:Spring框架通过提供缓存、连接池、批处理和异步处理等机制,帮助开发者优化应用程序的性能和资源利用率。
  5. 促进代码的可测试性:Spring框架鼓励编写可测试的代码,通过依赖注入和面向接口的编程,使单元测试和集成测试变得更加容易。。
  6. 提供丰富的功能扩展:Spring框架提供了众多的模块和扩展,如Spring MVC、Spring Security、Spring Data和Spring Integration等,覆盖了各个领域和应用场景。

通过实现这些目标,Spring框架已经成为Java开发中最受欢迎和广泛应用的框架之一,为开发者提供了强大的工具和解决

三、Spring的历史🍭

 1、历史由来🧁

Spring框架的发展历史可以追溯到2002年,它起源于Rod Johnson所著的《Expert One-on-One J2EE Design and Development》一书中提出的一种轻量级的Java开发框架概念。随后,Rod Johnson与其他开发者共同创建了Spring框架,并于2004年发布了第一个正式版本。

最初的Spring框架旨在解决传统的企业级Java开发中的一些问题,如复杂的配置、紧耦合的代码和难以进行单元测试等。它引入了控制反转(IoC)和面向切面编程(AOP)等核心概念,通过IoC容器来管理对象之间的依赖关系,并提供了AOP支持来实现横切关注点的模块化。

随着时间的推移,Spring框架不断演进和发展。在2006年,Spring 2.0发布,引入了新的功能和改进,如注解驱动的开发模型、Spring MVC框架和对Java 5特性的支持。这些变化使得Spring更加易用和强大,并赢得了更广泛的开发者支持和认可。

在2013年,Spring团队发布了一项重要的创新——Spring Boot。Spring Boot旨在简化Spring应用程序的配置和部署,通过提供自动配置、约定优于配置和快速集成等特性,使开发者能够更快地搭建起一个可运行的应用程序。Spring Boot的出现进一步推动了Spring框架的普及和流行。

随着时间的推移,Spring框架继续进行版本迭代和功能扩展,不断适应新的技术和开发需求。Spring框架的生态系统也变得更加丰富和多样化,涵盖了众多的扩展模块和第三方库,如Spring Security、Spring Data和Spring Cloud等,为开发者提供了更多的选择和解决方案。

至今为止,Spring框架已经成为Java开发中最受欢迎和广泛应用的框架之一。它不仅为企业级应用程序提供了强大的支持,还在各个领域和规模的应用开发中发挥着重要作用,为开发者提供了高效、可靠和可扩展的解决方案。

2、Spring版本迭代的过程🧁

Spring框架的版本迭代带来了许多新特性和改进,以下是一些主要版本的特点:

1. Spring 1.x:Spring框架的最初版本,引入了核心概念如控制反转(IoC)和面向切面编程(AOP)。它通过解耦和简化企业级Java开发,提供了更灵活和可测试的代码编写方式。

2. Spring 2.x:引入了许多重要的功能和改进,包括注解驱动的开发模型、全面支持Java 5特性(如泛型、枚举和注解)、Spring MVC框架的引入以及对AspectJ的集成等。

3. Spring 3.x:在Spring 3版本中,主要关注于Java EE 6的支持和Web开发的改进。它引入了Java配置(JavaConfig)替代XML配置的方式,提供了更简洁和类型安全的配置方式。此外,Spring 3还增强了对RESTful Web服务、Servlet 3.0规范和WebSocket的支持。

4. Spring 4.x:主要关注于对Java 8和Java EE 7的支持。Spring 4框架对Java 8的新特性进行了整合,如Lambda表达式、Stream API等。同时,它还增强了对WebSocket、HTML5和异步编程的支持,并对Spring MVC和Spring Security进行了改进。

5. Spring 5.x:引入了一些重要的变化和功能增强。其中最显著的改变是对Java 8及以上版本的支持,对响应式编程模型的引入以及对Spring WebFlux框架的推出。Spring 5还提供了对Reactive Streams、Spring Boot 2和Spring Cloud的集成支持。

 四、Spring可以干什么🍭

说了这么多,那Spring可以干什么?🐱

Spring框架在各个领域和应用场景中都得到了广泛的应用:

1. 企业应用开发:Spring框架是构建企业级应用程序的首选框架之一。它提供了丰富的功能和组件,如依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问和集成等,使开发者能够轻松构建可靠、高效和可扩展的企业级应用。

2. Web开发:Spring MVC是Spring框架的Web开发模块,它提供了一个灵活而强大的MVC(模型-视图-控制器)架构,用于构建Web应用程序和RESTful API。Spring MVC支持注解驱动的开发模式、请求处理、表单验证、文件上传等功能,使Web开发变得简单和高效。

3. 微服务架构:Spring框架与Spring Boot和Spring Cloud等技术相结合,成为构建微服务架构的理想选择。Spring Boot简化了微服务的配置和部署,Spring Cloud提供了一系列的解决方案,如服务注册与发现、负载均衡、断路器模式等,帮助开发者构建弹性、可伸缩和可靠的微服务应用。

4. 数据访问:Spring框架为数据访问提供了多种选择和支持。它整合了多种数据访问技术,如Spring JDBC、Spring ORM(如Hibernate、MyBatis)和Spring Data等,使开发者能够以统一的方式进行数据库操作和持久化。

5. 批处理和调度:Spring框架提供了批处理和调度的支持,使开发者能够处理大量的数据处理和定时任务。通过Spring Batch模块,开发者可以编写批处理作业,并进行任务调度和监控。同时,Spring框架还集成了调度器(如Quartz),使开发者能够轻松实现定时任务的管理和执行。

6. 消息队列和异步处理:Spring框架提供了对消息队列和异步处理的支持。通过集成消息中间件(如ActiveMQ、RabbitMQ)和异步处理框架(如Spring Async),开发者可以实现解耦、高性能的消息传递和异步处理,提升系统的响应性和可伸缩性。

除了上述领域,Spring框架还在安全性、缓存、搜索、国际化和日志等方面提供了丰富的解决方案和支持。无论是大型企业级应用还是中小型的Web应用,Spring框架都能够提供强大的支持和灵活性。

 

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

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

相关文章

15-Vue技术栈之创建Vue3.0工程

目录 1.使用 vue-cli 创建2.使用 vite 创建 1.使用 vue-cli 创建 官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create ## 查看vue/cli版本,确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm insta…

DAY 70 WEB缓存——squid代理服务器应用

正向代理:代替客户端向服务端发送请求。 反向代理:代理服务端,将请求转发给多个服务端。 Squid代理服务器介绍 Squid 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制(缓存网页对象,减少重复请求&#x…

深度学习常用名词解析

深度学习: 英文DL(Deep Learning),指多层的人工神经网络和训练它的方法。一层大量的神经网络会把大量的矩阵数字作为输入,通过非线性激活方法获取权重,再产生另一个数据集和作为输出。 Epoch: 在模型训练的时候含义是训练集中的…

数据结构——实现双向链表

文章目录 :cool:前言:smile:带头双向循环链表的结构体搭建和初始化的操作:bear:创造一个哨兵位头结点:monkey:申请一个节点:dog:初始化:cat:打印:potato:判空:tomato:销毁:cow:尾插:strawberry:头插:banana:尾删:orange:头删:pear:查找:watermelon:在pos位置之前插入:apple:删除…

electron-vue 运行报错 Object.fromEntries is not a function

文章目录 1. 背景2. 解决方案2.1 第一步:安装依赖2.2 第二步:项目中引入 3. 组件详解 1. 背景 最近研究一款桌面端应用的开发框架electron-vue,在按照 electron-vue官方文档 操作之后操作如下,Object.fromEntries is not a funct…

抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵同步分发

前言:抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发。抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动…

腾讯云服务器端口怎么全开?教程来了

腾讯云服务器端口怎么全开?云服务器CVM在安全组中设置开通,轻量应用服务器在防火墙中设置,腾讯云百科来详细说下腾讯云服务器端口全开放教程: 目录 腾讯云服务器端口全部开通教程 云服务器CVM端口全开放教程 轻量应用服务器开…

一文学会TypeScript

TypeScript笔记 文章目录 TypeScript笔记[toc]第一章 TypeScript简介1.1、TypeScript简介1.2、TypeScript安装1.3、TypeScript项目初始化1.4、Hello TypeScript 第二章 TypeScript数据类型2.1、TypeScript的类型2.2、字面量类型2.3、联合类型2.4、any 与 unknown2.5、类型断言2…

5.1 因特网概述

5.1 因特网概述 我们知道因特网是一个很大的互联网,它由大量的通过路由器互联起来的物理网络构成,我们下思考几个问题 为什么因特网要考虑包容多种物理网络技术呢? 因为价格低廉的局域网只能够提供短距离的高速通信,而能够跨越长…

渲大师云主机按量付费功能上线!

云主机可以提供强大的计算和存储能力,通过使用云主机,政企办公、视觉设计、影视制作和深度学习领域的专业人士可以获得更大的灵活性、可扩展性和计算能力,提高工作效率和效果。 然而,当我们在选择和使用云主机时,需要…

如何优雅的在SpringBoot中编写选择分支,而不是大量if else?

一、需求背景二、创建项目三、基础工作四、定义 Handler 类五、实现员工接口六、功能测试6.1 开发控制器6.2 功能测试 七、总结 一、需求背景 部门通常指的是在一个组织或企业中组成的若干人员,他们共同从事某一特定工作,完成共同的任务和目标。在组织或…

Logisim 头歌 偶校验解码电路设计 图解及代码(计算机组成原理)

努力是为了不平庸~ 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 急的同学请直接点击目录跳到下方解答处!! 目录 图解:​编辑 代码题解(免费)&#x…

泰酷辣!基于全志R818的开源超迷你安卓手持终端CyberPad,芒果派惊喜之作

​继推出大小仅与普通SD卡不相上下爱的超迷你模组MCore-H616核心板之后,鸽了近半年时间的芒果派,又带来了一款惊喜之作——MCore-R818核心板。 该款MCore的设计也是基于R818的特性,做出了一些小小的改变。 芯片本体封装设计较小,…

【力扣周赛】第347场周赛

【力扣周赛】第347场周赛 6457. 移除字符串中的尾随零题目描述解题思路 2711. 对角线上不同值的数量差题目描述解题思路 6455. 使所有字符相等的最小成本题目描述解题思路 6456. 矩阵中严格递增的单元格数题目描述解题思路 6457. 移除字符串中的尾随零 题目描述 描述&#xf…

如何让Task在非线程池线程中执行?

Task承载的操作需要被调度才能被执行,由于.NET默认采用基于线程池的调度器,所以Task默认在线程池线程中执行。但是有的操作并不适合使用线程池,比如我们在一个ASP.NET Core应用中承载了一些需要长时间执行的后台操作,由于线程池被…

Linux:shell脚本的介绍,创建与执行

linux的shell脚本就是windows的bat脚本,也就是通常所说的批处理。更简洁地说,就是很多命令的结合体,就像编程一样。 windows脚本的扩展名是.bat,而linux脚本的扩展名则是.sh centos在编写shell脚本的文件最上边,需要加…

如何使用Sentinel的Slot插槽实现限流熔断,看完这篇文章会有新的收获

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍如何使用Sentinel的Slot插槽实现限流熔断,后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x…

对于2023年参加国家计算机软考系统分析师的感想

文章目录 前言系分简介系分知识点今年的题型综合知识(上午选择题)案例分析(下午简答分析题)论文(下午小作文) 写在最后 前言 23年3月27日参加了国家计算机软考系统分析师,考完后很多的题库网站就有小道估分了。当然&a…

一些零零碎碎的记录

Questions1. 用户访问多网址服务器同一个IP是怎么回事 Q:用户访问服务器的同一个IP不同网址,服务器是如何区分的A: 在 HTTP 协议中,客户端通过发送请求报文来向服务器请求资源。每个 HTTP 请求都包含一个 HTTP 头部,其中包括了一些关键信息&…

力扣sql中等篇练习(三十)

力扣sql中等篇练习(三十) 1 即时食物配送||| 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT order_date,ROUND(100*count(IF(order_datecustomer_pref_delivery_date,customer_id,null))/count(*)…