Spring基础——初探

news2024/11/16 7:22:42

 Spring是一个开源的Java应用程序开发框架,它提供了一个综合的编程和配置模型,用于构建现代化的企业级应用程序。Spring的目标是简化Java开发,并提供了许多功能和特性,以提供开发效率、降低开发复杂性。

特别

主要功能

IoC容器

IoC容器负责对象的创建和管理,实现了控制反转(IoC)和依赖注入(DI)模式。降低了对象之间的耦合性。

AOP支持

通过将横切关注点(如日志、事务)与核心业务逻辑分离,实现了代码的模块化和可重用性。

声明式事务管理

通过配置注解或XML,可将事务逻辑从业务代码中分离出来,实现了事务的一致性和可靠性。

表 Spring框架的主要特点及功能

Spring框架的核心是IoC和AOP。

1 IoC

IoC 控制反转(Inversion of Control),它不是一门技术,而是一种设计思想(模式)。能够指导我们如何设计出松耦合、更优良的程序。

 图 传统方式为ClassA创建依赖对象

上面的createInterfaceB()方法表面上缓解了ClassA与InterfaceB具体类的耦合关系,但实质上代码耦合并没有改变。

通过IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中(依赖注入 DI)。

IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分离(通过文本的配置文件进行应用程序组件间相互关系的配置,从而不用重新修改并编译具体的代码)。

“控制反转” 的核心是容器帮我们查找及注入依赖的对象,对象只是被动地接收依赖对象。

1.1 实现策略

IoC中最基本的技术就是“反射”编程。根据给出的类名(字符串)来生成对象。

Spring实现IoC模式是通过依赖注入的方式:容器全权负责组件的装配,它会把符合依赖关系的对象通过JavaBean属性(设置方法注入)或构造函数(构造器注入)传递给需要的对象。

2 AOP

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。是一种设计模式。

OOP 面向对象编程

针对业务处理过程的实体及其属性和行为进行抽象封装,以便获得更加清晰高效的逻辑单元划分。(面向对象)

AOP 面向切面编程

针对业务处理过程中的切面进行提取,所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。(面向过程)

表 OOP 与AOP的对比

2.1 为什么要用AOP

在开发中,往往在业务基础代码上还需要做其他操作,比如记录日志、对参数进行校验等。我们可以采用代理模式来实现这一需求。但是在系统中需要做额外操作的位置比较多,而且做得额外处理可能不一样,如果为这些位置单独写个动态代理类,则会造成代理类过多,及造成系统业务混乱。

我们需要一个统一处理这些代理的地方,来管理这些代理对象及代理方法等。AOP就是用来实现这个效果的。

图 AOP切入

2.2 AOP 的组成

AOP 主要由切面(Aspect)组成。

切面(Aspect):切入到指定方法的代码片段称为切面(上面的权限验证、参数校验及日志记录插入到指定方法的代码片段)。切面由切点和处理组成。

切点(Pointcut):用于指定某个处理应该在何时被调用。切点是用来维护一组连接点的。

连接点(Join Point):在应用执行过程中能够插入切面点一个点(指在被插入代码中的位置)。

处理(Advice):即需要增强指定方法功能的片段(上面的权限验证、参数校验及记录日志)。

3 初始化Spring应用

在实际开发Sping项目中,我们往往不会手动创建项目的目录结构和定义构建规范的各个步骤,而是通过Spring InitiaLizr来初始化Spring项目。

3.1 Spring Initializr

Spring Initializr是一个基于浏览器的Web应用,同时也是一个REST API,它能生成一个Spring项目结构的骨架。

图 IDEA 中使用Spring Initializr初始化Spring Boot项目

图 Spring Initializr 生成的pom.xml

3.2 JAR和WAR

JAR:Java归档(Java Archive),是一种用于打包Java类、资源文件和元数据的标准格式。它可以将所有需要的类和资源打包到一个文件中,并通过Java虚拟机来运行。

WAR:是Web Archive到缩写,是一种用于打包Web应用程序的标准格式。可以包含Java类文件、JSP页面、HTML页面等其他Web资源文件。通常用于将Web应用部署到Web服务器中。

JAR

WAR

部署方式

可以在任何JAVA环境中运行。但无法直接在Web容器中部署(缺乏Web.xml文件)。

专门用于Web应用程序部署的。可以直接部署在Web容器中。部署时直接将WAR文件放到容器webapps目录下,容器在启动时会自动解压WAR文件。

适用场景

开发独立应用程序,如桌面应用或命令行工具。不适用Web应用程序。

专门用于Web应用程序的打包和部署。

优点

部署简单、可独立运行、轻量级

适合WEB应用程序,支持JSP页面。

缺点

不适合Web应用程序。不支持JSP页面。

部署复杂、依赖Web容器、体积更大

表 JAR和WAR的区别

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

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

相关文章

JPA Buddy快速创建update、find、count、delete、exists方法

JPA Buddy快速创建update、find、count、delete、exists方法,JPA默认提供的CrudRepository\JpaRepository提供的方法比较少,一般我们会手写一些方法,这里我们选择通过JPA Buddy快速生成,之前文章中讲到了JPA Buddy原本是IDEA收费插…

数据结构与算法【数组】Java实现

数组是一组元素组成的数据结构,元素类型必须相同,其次,数组内元素是连续存储的,因此数组中元素地址可以通过索引计算出来。 空间占用 在Java中,数组本质上也是一个对象,因此也存在对象头信息。那么数组的…

PHP原生类总结利用

再SPL介绍 SPL就是Standard PHP Library的缩写。据手册显示,SPL是用于解决典型问题(standard problems)的一组接口与类的集合。打开手册,正如上面的定义一样,有许多封装好的类。因为是要解决典型问题,免不了有一些处理文…

新的开始吧

项目答辩终于结束了: 学习规划 下面先对自己的目前的情况来说: 学长学姐让我先把vue和boot学完,所以我打算先把vue3和boot学一下,但是每天还要花一点时间在六级的听力和阅读上面,还有就是算法; 下面进行…

换根dp学习笔记

最近模拟赛经常做到,于是我就学习了一下。 算法原理 换根 d p dp dp的题一般都会给出一个无根树,因为以不同的点为根时,问题的答案不一样,所以它会让你输出答案的最大或最小值。 暴力去做这种题,就是以每个点为根然…

HarmonyOS 学习记录

时光荏苒,岁月如梭,韶华不负,未来可期。转眼间已经30岁了,学习的重要性不言而喻,在接下来的日子里记录下自己学习HarmonyOS的过程。增加一下知识储备,防患于未然嘛 不得不说华为的开发文档写的不错,开发工具直接安装后自动配置环境…

RLHF讲解

RLHF包含了两个至关重要的步骤: 训练Reward Model用Reward Model和SFT Model构造Reward Function,基于PPO算法来训练LLM frozen RMfrozen SFT ModelActor π Φ R L \pi_{\Phi}^{R L} πΦRL​ initialized from SFT ModelCritic V η V_\eta Vη​ i…

基于springboot实现结合疫情情况的婚恋系统【项目源码】

基于springboot实现结合疫情情况的婚恋系统演示 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计,其不仅继承了Spring框架原来有的优秀特性,而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原…

头歌答案HTML——基础

目录 HTML——基础 第1关:初识HTML:简单的Hello World网页制作 任务描述 第2关:HTML结构:自我简介网页 任务描述 HTML——基本标签 第1关:创建第一个 HTML 标签 任务描述 第2关:创建 任务描述 …

【Liunx】服务器解决 跨域问题

首先打开后端的站点 在站点设置内打开 "配置文件" 然后在 “server_name 本机ip ”下方添加跨域配置,添加成功后重启nginx即可 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS, PUT, DELETE; add_header A…

使用Python分析时序数据集中的缺失数据

大家好,时间序列数据几乎每秒都会从多种来源收集,因此经常会出现一些数据质量问题,其中之一是缺失数据。 在序列数据的背景下,缺失信息可能由多种原因引起,包括采集系统的错误(例如传感器故障)…

ROS基础知识复习

【置顶】感谢参考:https://zhuanlan.zhihu.com/p/662074088 0.背景 工作一年多没有做 ROS 相关的开发了,最近找工作想做回这一块来,根据参考内容,抽时间给这边的基础知识敲一遍复习一下 1.环境检查 打开了之前的笔记本&#x…

AOMedia发布免版税沉浸音频规范IAMF

11月10日,开放媒体联盟(AOMedia)发布了旗下首个沉浸式音频规范IAMF(https://aomediacodec.github.io/iamf/),IAMF是一种编解码器无关的容器规范,可以携带回放时间渲染算法和音频混音的信息&…

git分支与tag标签的介绍与使用)

git分支与tag标签的介绍与使用 一.什么是分支与标签1.2.开发环境分层 二git分支介绍2.1分支操作2.2.IDEA中操作分支 三、Git标签的讲解3.1.GitBashHere操作标签3.2. IDEA中操作标签 一.什么是分支与标签 分支(Branches): 功能开发&#xff…

html菜单的基本制作

前面写过一点网页菜单的博文&#xff1b;下面再复习一些技术要点&#xff1b; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…

GetSimple CMS忘记密码

GetSimple CMS是一个超简单的 CMS&#xff0c;适合建立个人网站等只需要极少数页面的网站。在站上百科上&#xff0c;是这么说的&#xff1a; GetSimple是一款基于XML存储数据的开源内容管理系统&#xff0c;且易于安装和定制&#xff0c;无需MySQL支持。提供撤销保护和备份功能…

RK3399平台开发系列讲解(应用篇)文件属性 stat 函数

🚀返回专栏总目录 文章目录 一、struct stat 结构体二、st_mode 变量三、struct timespec 结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 下可以使用 stat 命令查看文件的属性,其实这个命令内部就是通过调用 stat()函数来获取文件属性的,stat 函数是 …

详解Java:抽象类和接口

前言&#xff1a;在前文中我们学习认知到了多态的使用和相关知识&#xff0c;算是打开了Java世界的大门&#xff0c;而本次要分享的抽象类和接口则是我们在面向对象编程中最常用的编程结构之一 目录 一.抽象类 abstract 抽象类特性 二.接口 语法规则 接口使用 接口特…

[笔记]深入解析Windows操作系统《番外》windows关键进程解释

文章目录 前言一、Linux起源与发展二、什么是shell1.什么是Shell 总结 前言 一、Linux起源与发展 二、什么是shell 1.什么是Shell 总结 以上就是今天要讲的内容&#xff0c;本文仅仅简单介绍了linux命令行的使用。 参考&#xff1a; shells 概念 centOS7中的几个Ctrl组合…

原型模式 rust和java的实现

文章目录 原型模式介绍优点缺点使用场景 实现java 实现rust 实现 rust代码仓库 原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能。 这种模式是实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆。当…