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

news2024/11/17 15:52:59

前言

小伙伴们大家好,我是陈橘又青,今天起 《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.coloradmin.cn/o/1211309.html

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

相关文章

南湖HIT论坛|《医疗数据安全风险分析及防范实践(2023)》正式发布

11月11日,2023年南湖HIT论坛在浙江嘉兴隆重举行。作为颇受HIT从业者关注的年度盛会——本届论坛以“数据驱动医院运营管理”为主题,全国各地医疗机构信息主管和骨干围绕“数据驱动运营管理、运营数据中心建设、数据治理和数据安全”等话题展开深入研讨。…

FPGA:我的零基础学习路线(2022秋招已上岸)持续更新中~

可内推简历,丝我即可 前言 初次接触FPGA是在2022年3月左右,正处在研二下学期,面临着暑假找工作,周围的同学大多选择了互联网,出于对互联网的裁员形势下,我选择了FPGA,对于硬件基础知识我几乎是…

【数据结构】堆(Heap):堆的实现、堆排序、TOP-K问题

目录 堆的概念及结构 ​编辑 堆的实现 实现堆的接口 堆的初始化 堆的打印 堆的销毁 获取最顶的根数据 交换 堆的插入(插入最后) 向上调整(这次用的是小堆) 堆的删除(删除根) 向下调整(这次用的…

2013年6月26日 Go生态洞察:Go Race Detector的探索

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

centos下安装mysql8版本

1、如果服务器没有wget,先下载wget工具 sudo yum install wget 2、下载指定mysql版本的tar包 sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar 3、解压tar包 sudo tar -xvf mysql-8.0.21-1.el7.x86_64.rpm…

现代浴室:从硬朗到柔美

现代浴室不再是冰冷的地方,而是一个温馨的角落。它是我们日常生活中的庇护所,一个能够唤起宁静和舒适感的地方。如今,浴室的设计注重的是颜色、材质、光线和表面的精心搭配,以创造一个柔和、温馨的空间。 与过去的硬朗陶瓷、锋利…

全国犯罪人数大数据可视化平台【可视化项目案例-08】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

工厂自动化中DCS软件

概述 Monitor.Analog是新一代运行监控系统,是物联网时代数据驱动的智能工厂的神经中枢。通过连接到阿自倍尔专有的在线故障预测系统(该系统利用 AI(人工智能))以及利用来自各个智能设备的监控和诊断数据的系统&#x…

Spring Boot EasyPOI 使用指定模板导出Excel

相信大家都遇到过,用户提出要把界面上的数据导成一个Excel,还得是用户指定的Excel格式,用原生的POI,需要自己去实现,相信是比较麻烦的,所以我们可以使用开源的EasyPOI. 先上个图,看看是不是大家…

第三篇 基于JSP 技术的网上购书系统—— 数据库系统设计(网上商城、仿淘宝、当当、亚马逊)

目录 1.逻辑关系设计 2.物理设计 2.1管理员表 2.2留言表 2.3会员登录表 2.4会员表 2.5订单表 2.6订单商品表 2.7产品表 2.8产品货架表 2.9收藏表 2.10类别表 2.11新闻表 数据库系统是用来保存数据的软件系统,当今比较流行的数据库系统,如 MS…

Linux在线安装MySQL8.0.24安装、MySQL数据备份和恢复

一、 Linux在线安装MySQL8.0.24 如果机器上已经有MySQL5.7版本需要先卸载 首先,需要停止MySQL服务。可以通过以下命令来停止服务: sudo systemctl stop mysqld接下来,我们需要卸载MySQL5.7。可以通过以下命令来卸载: sudo yum…

为什么串行通信中停止位(停止bit、stop bit)通常使用高电平?

文章目录 基于高电平的停止位选择:理解其深层原因引言数据通信和停止位数据通信简介停止位的定义和作用 为什么选择高电平作为停止位?硬件的考虑误码率的影响 总结参考资料 基于高电平的停止位选择:理解其深层原因 引言 在数字通信中&#…

WPF小知识

在编写WPF程序遇到一些小问题&#xff0c;所以记录起来&#xff0c;查其他方便。 Label自动换行 网上搜的都不能自动换行&#xff0c;发现使用Run 就可以。在脚本中直接调用labTip.Text进行赋值就可以了。 <Label Foreground"#FF9E9E9E" FontSize"16"…

人工智能基础_机器学习035_多项式回归升维实战2_使用sklearn的PolynomialFeatures进行升维---人工智能工作笔记0075

我们再来做一个升维处理,这里我们不再自己去对数据进行比如,相乘操作,来给数据手动添加维度了, 这里我们用sklearn库提供的PolynomialFeatures来自动对数据进行升维. from sklearn.linear_model import LinearRegression # PolynowlalFeatures,多项式升维处理 from sklearn.…

一招学会!柴油发电机监测真的超级简单!

随着现代社会对电力的不断需求和对可靠性的高要求&#xff0c;柴油发电机的监控变得愈发重要。监控系统的引入不仅可以提高柴油发电机的运行效率&#xff0c;还能有效预防潜在故障&#xff0c;确保系统稳定运行。 客户案例 工业生产场 在工业生产场&#xff0c;柴油发电机是关…

小红书电商文案怎么创作,撰写事项!

电商文案就像是连接着品牌方与消费者之间的桥梁。优秀的电商文案&#xff0c;能够帮助消费者在第一时间内&#xff0c;了解产品&#xff0c;与品牌产生链接&#xff0c;最终带来消费转化。那么小红书电商文案怎么创作&#xff0c;撰写事项&#xff01;今天来马文化传媒为大家总…

Java项目maven打包,打jar包中不包含项目引用第三方jar包,以及打war包不能将其放到lib的问题

在使用maven进行打包项目中&#xff0c;想要将第三方的jar包放入&#xff0c;有两种方法&#xff1a;一种将jar包上传到maven库中&#xff0c;第二种再pom.xml中进行配置&#xff0c;第三种 情况是需要打包成war包放入tomcat中&#xff1b;具体如下&#xff1a; 第一种&#x…

MyEclipse 2017 安装与pj

关于Myeclipse 2017的安装与破解 MyEclipse企业级工作平台&#xff08;MyEclipseEnterprise Workbench &#xff0c;简称MyEclipse&#xff09;是对EclipseIDE的扩展&#xff0c;利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。…

【带头学C++】----- 六、结构体 ---- 6.6 结构体的指针成员

6.5结构体指针变量 结构体的指针变量:本质是变量只是该变量保存的是结构体变量的地址 6.5.1结构体指针变量的定义 通过指针&#xff0c;可以访问到我们结构体变量的值 可以通过 -> 符号 访问到结构体变量 6.5.2 结构体数组元素的指针变量 指针变量保存结构体数组元素…

Django视图层

视图层 django视图层&#xff1a;Django项目下的views.py文件&#xff0c;它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据 三板斧 HttpResponse # 返回字符串 render # 返回html页面&#xff0c;并且在返回浏览器之前还可以给html文件…