Spring系列学习一、Spring框架的概论

news2024/10/1 23:47:44

Spring框架的概论

  • 一、 Spring框架的起源与历史
  • 二、 Spring框架的核心理念与特点
  • 三、 Spring与其他框架的对比
    • 1、首先介绍下Spring与其平替的EJB的对比:
    • 2、接下来介绍下Spring与基于Java EE原生技术的对比
    • 3、Spring与Hibernate的对比
    • 4、Spring与Struts的对比
  • 四、Spring框架的模块介绍

一、 Spring框架的起源与历史

最早,有个人名叫Rod Johnson,他设计了Spring框架,为何叫Spring呢?说是因为它像春天一样给人带来新的希望——我知道你会想,这也太浪漫了吧?不过我们不否认,Spring它确实带来了新的生机。

在2002年,Johnson写了一本名为《Expert One-on-One J2EE Development without EJB》的书籍,主旨是我们可以摆脱繁琐的EJB(有兴趣可以自己查资料)开发,选择更简洁、更易用的方式进行实现。这鲜明的观点引起了巨大的反响,Spring从此开始了它的旅程。可以毫不夸张的说,Spring的出现,就是为了颠覆基于EJB厚重的java开发框架的,开创了轻量级的企业应用开发框架,为JAVA语言这么多年长盛不衰做出了最大的贡献。 Spring官网地址 https://spring.io/
在这里插入图片描述

二、 Spring框架的核心理念与特点

你是不是想知道,为什么大家都爱Spring?让我掀开它的神秘面纱:

  • 便捷的开发:Spring的出现就是为了简化开发,它允许你只关注业务实现,其他琐碎的事情交给Spring。
  • 轻量级:Spring的体积相对较小,但又包含丰富的集成选项,让你几乎可以随心所欲地将自己的程序与各种系统打交道。
  • IoC容器:Spring提供了强大的IoC容器,它会按需为你管理Bean的生命周期,你唯一要做的就是选择如何用它。
  • AOP支持:Spring为我们提供了AOP(面向切面编程),这样你就可以在不改动业务代码的基础上,进行诸如日志记录、事务管理等操作。

三、 Spring与其他框架的对比

1、首先介绍下Spring与其平替的EJB的对比:

EJB (Enterprise JavaBeans)是Java EE规范的一个重要部分,为开发企业级分布式系统提供了一套丰富的服务。然而,随着Spring框架的出现,EJB并不再是唯一的企业级开发解决方案。Spring和EJB有积极的竞争关系,它们各有优缺点。

  • 易用性

Spring:Spring框架以简化开发为目标,它主要使用POJOs (Plain Old Java Objects) 进行开发,使得编码过程更灵活,可测试性更强。Spring提供了面向切面编程(AOP)和依赖注入(DI),使得开发者能更专注于业务逻辑而非系统级别的编程问题;

EJB:早期的EJB由于复杂的生命周期和复杂的配置,使用起来过于繁琐。但EJB 3.0及其之后的版本做了很多改进,像Spring一样支持注解和POJO。然而,EJB通常需要依赖特定的Java EE应用服务器,而Spring应用可以在任何的Servlet容器中运行。

  • 性能

Spring:Spring框架为应用提供了轻量级容器,对系统资源的消耗较小,同时,Spring的IoC(控制反转)和AOP特性使得代码运行高效,并且Spring本身提供了丰富的对缓存、数据库等的处理机制,使得性能优化更方便;

EJB:EJB通常运行在Java EE应用服务器中,如WebLogic,WebSphere等,这些服务器可能会提供事务管理、安全性、并发处理等多种服务,而这可能会导致额外的系统开销。但在需要复杂的分布式事务或并发处理的系统中,EJB可能会提供更优的性能。

  • 移植性

Spring:Spring是非侵入性的,意味着使用Spring框架开发的应用程序可以很方便地移植到其他技术和框架上,这大大增强了应用的移植性;

EJB:虽然EJB是Java EE规范的一部分,理论上可以在任何遵循Java EE规范的应用服务器中运行,但实际上,由于特定的启动类和运行环境,EJB在不同的应用服务器之间移植可能会遇到一些问题。

2、接下来介绍下Spring与基于Java EE原生技术的对比

  • Spring框架Java EE的一种轻量级解决方案

Java EE是一个完整的企业级应用开发平台,包括许多规范和API,如JPA、EJB、JSF和JMS等。在某种程度上,Spring框架可被视为Java EE的一种轻量级替代方案。

  • Spring相比Java EE轻量,灵活,门槛低

Spring的优点在于它的轻量级和灵活性。与Java EE相比,Spring的学习曲线更为平缓,Spring没有复杂的企业级特性,但通过使用DI、AOP等技术,Spring可以处理很多企业级应用的需求。此外,Spring框架的自适应性更强,可以轻松地与许多第三方库集成。

3、Spring与Hibernate的对比

Hibernate是一个开源的持久层框架,它在Java应用程序和数据库之间提供了ORM服务。Spring和Hibernate可以很好地集成在一起,Spring提供了一个称为Spring ORM的模块来支持Hibernate。

Spring的优势在于它的全面性,Spring不仅提供了持久层解决方案,而且还处理了许多其他的跨越应用层的问题,如安全性、事务管理、依赖注入等。此外,Spring的依赖注入可以简化复杂的Hibernate关联和事务管理。

4、Spring与Struts的对比

Struts是一个用于创建企业级Java Web应用程序的MVC框架。与Spring MVC相比,Struts2具有良好的分层架构和强大的标签库,但在开发效率和灵活性方面,Struts2不如Spring MVC,并且安全问题频发,使得struts2份额越来越低。

Spring为MVC开发提供了Spring MVC框架,优点在于它可以与Spring框架无缝集成,它支持灵活的URL映射和视图解析,并且Spring MVC的控制器编写起来更加简单,更符合POJO的编程范式。此外,Spring MVC的异常处理更加强大。

四、Spring框架的模块介绍

Spring框架拆分出了20多个独立的模块,看起来是不是有点头晕?其实只要你记住核心模块,其他的都可以在需要时查阅文档。
spring-core:核心工具,包含IoC与DI功能;
spring-beans:提供BeanFactory,是工厂模式的优雅实现;
spring-aop:支持AspectJ风格的面向切面编程;
spring-context:包含多个企业级服务,如邮件发送、JNDI定位、EJB集成等,还有许多与Spring核心模块的扩展;
spring-jdbc和spring-tx:简化了JDBC编程与事务管理;
spring-webmvc:提供了MVC设计模式的全功能实现,是开发Web应用的完美选择。

本节为Spring系统学习第一节,需要明白Spring的核心思想和其的独特优势就行。你也许会忽略Spring的来龙去脉,但是在此后的章节中,你将会发现这正是你对Spring的深度理解的开始。后续的章节将更深入地剖析Spring框架的内在机制,并通过实战示例的方式讲述Spring的应用和原理,让你从Spring小白成长为Spring大拿。

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

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

相关文章

docker的基本管理和相关概念

docker的基本管理和概念 docker:开源的应用容器引擎。基于go语言开发的。运行在linux系统当中的开源的,轻量级的“虚拟机” docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器 docke…

计算机网络——数据链路层(三)

前言: 前面我们已经对计算机网络的物理层有了一个大概的了解,今天我们学习的是物理层服务的上一层数据链路层,位于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传…

RabbmitMQ基础

RabbmitMQ基础 1.1 什么是MQ MQ(Message Queue),从字面意思看,本质是个队列,FIFO先入先出,队列中存放的是message。是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游…

DDS深度揭秘:数字音乐的心灵密码

嗨,音乐奇迹的探索者们!今天,我们将揭开音乐数字化的神秘面纱,深入探讨Direct Digital Synthesis(DDS)这项数字音乐技术。别担心,我们将用通俗易懂的语言为你解析DDS是什么、它是如何工作的&…

零基础学人工智能:TensorFlow 入门例子

识别手写图片 因为这个例子是 TensorFlow 官方的例子,不会说的太详细,会加入了一点个人的理解,因为TensorFlow提供了各种工具和库,帮助开发人员构建和训练基于神经网络的模型。TensorFlow 中最重要的概念是张量(Tenso…

【论文解读】3D视觉标定的显式文本解耦和密集对齐(CVPR 2023)

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2209.14941 开源代码:https://github.com/yanmin-wu/EDA 图1所示。文本解耦,密集对齐的3D视觉标定。文本中的不同颜色对应不同的解耦分量。…

Pinely Round 3 (Div. 1 + Div. 2) E. Multiple Lamps(思维题 暴力 补写法)

题目 n(n<2e5)盏灯&#xff0c;编号1到n&#xff0c;一开始全是熄灭的 n个开关&#xff0c;第i个控制着所有i的倍数&#xff0c;按下i的时候&#xff0c;i、2i、...这些灯的状态会被翻转&#xff0c; m(m<2e5)个限制&#xff0c;第j条限制形如uj,vj&#xff0c;表示uj…

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…

springboot整合JPA 多表关联 :一对多 多对多

补充一下自定义SQL 这是连表查询&#xff0c;可以任意查出字符&#xff0c;用Map接收 Testvoid test3() {JPAQueryFactory jpaQueryFactory new JPAQueryFactory(em);QStudent student QStudent.student;QMessage message QMessage.message;//constructor(StuMesDto.class, …

【pynput】鼠标行为追踪并模拟

文章目录 前言基本思路安装依赖包实时鼠标捕获捕获鼠标位置捕获鼠标事件记录点击内容 效果图 利用本文内容从事的任何犯法行为和开发与本人无关&#xff0c;请理性利用技术服务大家&#xff0c;创建美好和谐的社会&#xff0c;让人们生活从繁琐中变得更加具有创造性&#xff01…

7. 结构型模式 - 代理模式

亦称&#xff1a; Proxy 意图 代理模式是一种结构型设计模式&#xff0c; 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问&#xff0c; 并允许在将请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f; 举个例子&#xff…

Oracle研学-查询

学自B站黑马程序员 1.单表查询 //查询水表编号为 30408 的业主记录 select * from T_OWNERS where watermeter30408 //查询业主名称包含“刘”的业主记录 select * from t_owners where name like %刘% //查询业主名称包含“刘”的并且门牌号包含 5 的业主记录 select * from…

Redis-运维

转自 极客时间 Redis 亚风 原文视频&#xff1a;https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据&#xff1a; Repl…

linux循环调度执行

9.2 循环调度执行 9.2.1 简介 cron的概念和crontab是不可分割的。 ​ crontab是一个命令&#xff0c;常见于Unix和Linux的操作系统之中用于设置周期性被执行的指令。 ​ 该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&#xff0c;以供之后读取和执…

基于AT89C51单片机的8位密码锁仿真与实物制作

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/88657969?spm1001.2014.3001.5503 源码获取 C 源码仿真图毕业设计实物制作步骤01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表…

在使用 npm install的时候提示node-sass command faile 解决方案

在使用npm install的时候错误提示node-sass 相关的。错误信息如下图&#xff1a; 解决方法&#xff08;PS&#xff1a;凯哥的不适用&#xff09; 出现这种问题基本是由于node版本与sass版本不匹配导致的 方案1&#xff1a;卸载node&#xff0c;安装对应版本 方案2&#xff1…

关键字:protected关键字

在 Java 中&#xff0c;protected 是一个访问修饰符&#xff0c;用于修饰类成员&#xff08;成员变量、成员方法和构造方法&#xff09;。当一个类成员被声明为 protected 时&#xff0c;它可以在同一包中的其他类以及子类中被访问。 以下是 protected 关键字的解析&#xff1a…

5. 创建型模式 - 单例模式

亦称&#xff1a; 单件模式、Singleton 意图 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一…

隧道裂缝检测_2【C++PCL】

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 1.前言 我们团队注重每一个细节,确保代码的可读性、可维护性和可扩展性达到最高标准。我们严格遵循行业最佳实践,采用模块化和面向对象的设…

k8s集群部署成功后某个节点突然出现notready状态的问题原因分析和解决办法

文章目录 1、问题描述2、查看node03的日志3、错误原因分析4、解决办法 1、问题描述 k8s集群配置为 一主三个节点&#xff1b;刚开始运行一直正常&#xff1b;某天突然node03主机状态变为notready&#xff0c;问题如下&#xff1a; 在master节点使用&#xff1a; #master节点…