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

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大拿。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle研学-查询

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

视频编辑与制作,添加视频封面的软件

如今,视频已经成为了我们生活中不可或缺的一部分,无论是社交媒体上的短视频,还是电影、电视剧,视频都以其独特的魅力吸引着我们的目光。而在这背后,视频剪辑软件功不可没。今天,我就为大家揭秘一款新一代的…

强化学习_06_pytorch-TD3实践(CarRacing-v2)

0、TD3算法原理简介 详见笔者前一篇实践强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3) 1、CarRacing环境观察及调整 Action SpaceBox([-1. 0. 0.], 1.0, (3,), float32)Observation SpaceBox(0, 255, (96, 96, 3), uint8) 动作空间是[-1~1, 0~1, 0~1]&#xff0c…

10 NAT网络地址转换

广域网技术 上面聊的内容都是内网的一些配置,但内网终将要访问外网的,我们需要怎么处理呢?一般使用HDLC(高级数据链路控制协议)或者PPP(点对点协议)。 使用PPP安全接入Internet PPP&#xff0…

Podman配置mongodb

文章目录 查询镜像拉取镜像查看镜像运行容器创建root用户 查询镜像 podman search mongo拉取镜像 podman pull docker.io/library/mongo查看镜像 podman images运行容器 podman run -d -p 27017:27017 --namemongodb-test docker.io/library/mongo创建root用户 podman exe…

详解现实世界资产(RWAs)

区块链中的现实世界资产(RWAs)是代表实际和传统金融资产的数字通证,如货币、大宗商品、股票和债券。 实际世界资产(RWA)的通证化是区块链行业中最大的市场机会之一,潜在市场规模可达数万万亿美元。理论上&…

12章总结

一.集合类概述 java.util包中提供了一些集合类,这些集合类又被称为容器。 集合类与数组的不同之处: 数组的长度是固定的,集合的长度是可变的:数组用来存放基本类型的数据,集合用来存放对象的引用。 常…

windows下使用vccode+cmake编译cuda程序

1、在vscode中安装Nsight Visual Studio Code Edition 在vscode中安装插件能够对cuda的代码进行语法检查 2、编写cuda程序 #include <iostream>__global__ void mykernelfunc(){}; int main() {mykernelfunc<<<1,1>>>();std::cout << "hel…

C++ 比 C语言增加的新特性 2

1.C新增了带默认值参数的函数 1.1 格式 格式&#xff1a;返回值 函数名&#xff08;参数1初始值1&#xff0c;..........&#xff09;{} 例如&#xff1a;void function&#xff08;int a10&#xff09;{} 调用&#xff1a;不需要更改参数的值&#xff1a;function&#x…

Kubernetes 学习总结(40)—— Kubernetes 之 自动伸缩 HPA、VPA、CA和CPA详解

前言 Kubernetes 提供了多种自动伸缩机制&#xff0c;例如 HPA&#xff08;Horizontal Pod Autoscaling&#xff09;&#xff0c;可以根据不同情况动态调整 Pod 副本数量。此功能使 Pod 能够有效地处理当前流量&#xff0c;而无需管理员不断干预来调整副本数量。除了 HPA 之外…

每日一题——LeetCode160.相交链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;提示&#xff1a; 2. 思路3. 代码 1. 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的…

HarmonyOs4.0基础(一)

目录 一、HarmonyOs系统定义 1.1系统的技术特性(三大特征) 1.1.1、硬件互助、资源共享 1.1.2、一次开发、多端部署(面向开发者) 1.1.3、统一OS&#xff0c;弹性部署(支持多种API&#xff1a;ArkTs、JS、C/C、Java) 1.2、系统的技术架构 二、Harmony OS项目搭建 2.1、(D…

Github 2023-12-24 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-24统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5Jupyter Notebook项目2C项目1C项目1Go项目1Java项目1JavaScript项目1Ruby项目1 Serverless Frame…

【零基础入门Docker】如何构建Web服务Dockerfile?

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Docker专栏https://blog.csdn.net/arthas777/category_12455882.html 目录 步骤1&#xff1a;第一步是构建我们的Docker文件&#xff0c;您可以使用vim编辑器。 步骤2&#xff1a;下一步是使用docker build命令…

【Python机器学习系列】一文搞懂机器学习中的转换器和估计器(附案例)

一、引言 表格数据一套完整的机器学习建模流程如下&#xff1a; 在机器学习中&#xff0c;转换器&#xff08;Transformer&#xff09;和估计器&#xff08;Estimator&#xff09;是两个重要的概念&#xff0c;转换器和估计器在机器学习中扮演不同的角色&#xff0c;但它们通常…

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…

Python如何将图片转换成字符

PIL(Python Image Library)库是Python平台上一个功能强大的图像处理标准库&#xff0c;支持图像的存储、显示和处理&#xff0c;几乎可以处理所有图片格式&#xff0c;如图像的压缩、裁剪、叠加、添加文字等等。 安装PIL库:pip install pillow from PIL import Image ascii_cha…

35c3 krautflare

参考这篇文章可以彻底了解本题的漏洞所在 https://xz.aliyun.com/t/6527 由于Math.expm1经过patch以后的返回值不可能是-0&#xff0c;但是patch的地方是在typer优化中&#xff0c;所以实际上如果没有优化的话是可以返回-0的&#xff0c;这就意味着如果我们先不停地Math.expm1…

手机技巧:安卓微信8.0.45测试版功能来了

目录 一、更新介绍 二、本次功能更新介绍 2.1 小程序界面优化 2.2 小程序个性化推荐支持关闭 三、其他实用的微信使用长按小技巧 3.1、长按对话框 3.2、长按搜索 3.3、长按相册 3.4、长按视频 3.5、长按表情包&#xff08;能开启2个技巧&#xff09; 3.6、长按音频文…

Linux——环境变量与本地变量

环境变量与本地变量 文章目录 环境变量与本地变量1. 环境变量1.1 命令行参数1.2 环境变量PATH1.3 环境变量的概念和相关操作1.3.1 用命令查看环境变量1.3.2 用命令添加环境变量&#xff1a;1.3.2 用命令删除环境变量1.3.3 利用代码查看环境变量1.3.4 利用代码修改或添加环境变量…