【Spring进阶系列丨第一篇】初识Spring开发

前言

小伙伴们大家好,我是陈橘又青,今天起 《Spring进阶系列》 开始更新。本专栏将涵盖Spring框架的核心概念、配置管理、Web开发、AOP、Boot、Security、Data、Integration和Batch等多个主题。通过理论讲解和实际案例的剖析,帮助读者深入理解Spring框架的原理和应用技巧,提升开发人员的技能水平。无论您是初学者还是有一定经验的开发者,都能在本专栏中找到有价值的内容。点此免费订阅,一起探索Spring框架的奥秘,提升您的开发能力!

在这里插入图片描述

文章目录

  • 前言
  • 一、Spring框架概述
  • 二、Spring的优势
  • 三、Spring能帮助我们做什么
  • 四、Spring体系结构
  • 五、Spring的官网
  • 六、Spring的使命/理念


一、Spring框架概述

Spring是什么?

Spring 是分层的 Java SE/EE 应用 full-stack【全栈式轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为核心,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

Spring倡导以 “最少侵入” 的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring。这里的"最少侵入"可以理解为:我们的项目中所使用的类无需继承框架提供的任何类,这样我们在更换框架时,之前写过的代码几乎可以继续使用。

轻量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反


二、Spring的优势

  • 方便解耦,简化开发

    ​ 通过 Spring 提供的 IoC 容器,可以将==对象间的依赖关系交由 Spring 进行控制==,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  • AOP 编程的支持

    ​ 通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。

  • 声明式事务的支持

    ​ 可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

  • 方便程序的测试

    ​ 可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是麻烦的操作,而是随手可做的事情。

  • 方便集成各种优秀框架

    ​ Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、SpringMVC、MyBatis等)的直接支持。

  • 降低 JavaEE API 的使用难度

    ​ Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

  • Spring 框架中包括了 J2EE 三层的每一层的解决方案(一站式

  • Java 源码是经典学习范例

    ​ Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。


三、Spring能帮助我们做什么

  • Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系
  • Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
  • Spring非常简单的帮我们管理数据库事务
  • Spring提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
  • Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
  • Spring方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)

四、Spring体系结构

Spring框架的体系结构通过分层的方式,将各种功能模块化,使得开发者可以根据需要选择和使用不同的模块,同时也使得框架本身更具有灵活性和可扩展性。

Spring框架的体系结构采用了分层的理念,根据功能的不同划分成了多个模块。这些模块大体可分为Data Access/Integration(数据访问与集成)WebAOP(面向切面编程)、AspectsInstrumentation(检测)、Messaging(消息处理)Core Container(核心容器)Test

核心容器的主要组件是BeanFactory,它是工厂模式的实现。Spring上下文是一个配置文件,向Spring框架提供上下文信息。此外,Spring框架中还有许多其他模块,例如Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中,而Spring DAO JDBC DAO抽象层提供了有意义的异常层次结构,用于管理异常处理和不同数据库供应商抛出的错误消息。Spring ORM提供了ORM的对象关系工具,其中包括JPA、JDO、Hibernate和MyBatis等。Spring Web模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文,而Spring MVC框架则是一个全功能的构建Web应用程序的MVC实现。

在这里插入图片描述
核心容器有spring-core、spring-beans、spring-context、spring-context-support、spring-experssion(SpEL、spring表达式语言、spring expression language)等。

  • spring-core:提供了框架的基本组成部分,包括IoC和依赖注入。
  • spring-beans:提供BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把编码和依赖从实际编码逻辑中解耦。
  • context:建立在core和beans模块基础上,它是一种类似JNDI的注册方式访问对象。Context继承自Bean,并添加了国际化事件传播、资源加载和透明的创建上下文等功能。Context模块也支持javaee功能。applicationcontext接口是context模块的焦点。spring-context-support提供了第三方集成到spring上下文的支持,如:缓存(Ehcache、Jcache、Guava)、邮件(javamail)、调度(commonJ、quartz)、模版引擎(freemarker、JasperReports)等
  • spring-expression:提供了强大的表达式语言,用于在运行时查询和操作图,它是JSP2.1中规定的统一表达式语言的扩展,支持get和set属性值、方法调用、访问数组集合及索引内容、逻辑算术运算、命名变量、通过名字对Spring IoC容器进行检索,支持列表的投影、选择及聚合等。

它们的依赖关系如下:

、

五、Spring的官网

Spring官网,开发者们可以获取到以下信息:

  • 各种关于Spring框架的详细介绍和文档。

包括各种Spring项目的信息(如Spring Boot、Spring、Spring Cloud等),以及如何搭建REST风格的web service和使用JPA等。

  • Spring各个版本的下载地址,包括jar包的链接和说明。
  • Spring的培训及证书认证信息。

此外,在首页上还会展示一些当前Spring比较流行的技术,帮助用户学习和使用Spring框架。

在这里插入图片描述


六、Spring的使命/理念

Spring的使命是解决企业级应用开发的复杂性,简化Java开发。它的设计目标是提供一个一站式轻量级应用开发平台。

Spring的设计理念是在JavaEE开发中,支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持OO(面向对象)设计方法。它通过IOC容器实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IOC容器,实现解耦。

这些理念和目标使Spring成为Java开发中重要的框架之一,帮助开发者提高开发效率,降低维护成本,提高代码的可维护性和可重用性。

总结:简化Java应用程序开发


《Spring进阶系列》 专栏欢迎订阅,我们下篇见~

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言编写代码示例

R语言编写的爬虫程序,使用了requests库来发送请求,使用BeautifulSoup库来解析HTML。 r # 第一步,安装必要的库 install.packages("xml2") install.packages("requests") install.packages("httr") install.pac…

【SQLite】环境安装

SQLite - C/C SQLite简介 SQLite 是一种轻量级的嵌入式数据库引擎,它在程序中直接访问数据库文件而不需要独立的数据库服务器。以下是一些关于 SQLite 的简介信息: 嵌入式数据库引擎: SQLite 是一种嵌入式数据库引擎,这意味着它…

打造全身视角的医院可视化能源监测管理平台,实现医院能源可视化管理

医院是大型公共建筑的一种,随着医院规模的不断扩大,医院能源消耗剧增,能源消耗居高不下。医院对于能源监管的需求也越来越高。医院建立一套能耗监测管理平台,对于降低医院能耗有着非常重要的作用。 医院能耗存在的问题 1、医院能…

Please No More Sigma(构造矩阵)

Please No More Sigma 给f(n)定义如下&#xff1a; f(n)1 n1,2; f(n)f(n-1)f(n-2) n>2; 给定n&#xff0c;求下式模1e97后的值 Input 第一行一个数字T&#xff0c;表示样例数 以下有T行&#xff0c;每行一个数&#xff0c;表示n。 保证T<100&#xff0c;n<100000…

为什么打开idea时,没有启动页面,如何解决?

更新idea2021.2后&#xff0c;当双击idea打开时&#xff0c;发现没有启动界面&#xff0c;直接进入IDEA界面&#xff0c;中间等待时间&#xff0c;让人误以为没有打开idea成功&#xff0c;使得多次点击idea图标。 解决方案就是 在idea界面菜单栏中找到帮助&#xff08;Help)&a…

时序数据库 TDengine + 高级分析软件 Seeq,助力企业挖掘时序数据潜力

作为一款制造业和工业互联网&#xff08;IIOT&#xff09;高级分析软件&#xff0c;Seeq 支持在工艺制造组织中使用机器学习创新的新功能。这些功能使组织能够将自己或第三方机器学习算法部署到前线流程工程师和主题专家使用的高级分析应用程序&#xff0c;从而使单个数据科学家…

【洛谷算法题】P5711-闰年判断【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5711-闰年判断【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式&a…

【PTQ】Cross-Layer Equalization跨层均衡-证明和实践详细解读

Cross-Layer Equalization跨层均衡 aimet解读 符合规则的模型结构 统一要求&#xff1a;单数据流&#xff0c;中间激活不流向其他地方概念说明&#xff1a; Conv: gruoups1的普通卷积&#xff0c;包括TransposedConv和ConvDepthwiseConv: 深度可分离卷积&#xff0c;groupsi…

王道数据结构课后代码题p40 6.有一个带头结点的单链表L,设计一个算法使其元素递增有序 (c语言代码实现)

这一题其实用到了直接插入排序的思想 视频讲解在这里哦&#xff1a;&#x1f447; p40 第6题 王道数据结构课后代码题 c语言代码实现_哔哩哔哩_bilibili 本题代码为 void paixu(linklist* L)//对单链表内的元素排序 {lnode* p (*L)->next;lnode* pre *L;lnode* r p-&…

【ArcGIS Pro微课1000例】0032:创建具有指定高程Z值的矢量数据

本文讲解ArcGIS Pro中创建具有指定高程值的矢量数据的两种方法。 文章目录 一、独立创建1. 新建地图场景2. 新建shapefile3. 绘制多边形4. 添加高程字段5. 三维显示二、基于高程源创建1. 创建栅格范围2. 添加Z值字段3. 添加Z信息4. 要素更新Z值一、独立创建 1. 新建地图场景 …

css:两个行内块元素和图片垂直居中对齐

目录 两个行内块元素垂直居中对齐图片垂直居中问题图片和文字垂直居中对齐参考文章 两个行内块元素垂直居中对齐 先看一段代码&#xff1a; <style> .box {width: 200px;height: 200px;line-height: 200px;font-size: 20px;text-align: center;display: inline-block;b…

Kotlin之控制语句和表达式

原文链接 Kotlin Controls and Expressions 有结果返回的是表达式&#xff0c;没有返回的称之为语句&#xff0c;语句最大的问题是它没有返回值&#xff0c;那么想要保存结果就必然会产生副作用&#xff0c;比如改变变量。很多时候这是不够方便的&#xff0c;并且在多线程条件…