Spring基础——初探

 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.rhkb.cn/news/189682.html

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

相关文章

SpringBootWeb案例——Tlias智能学习辅助系统(3)——登录校验

前一节已经实现了部门管理、员工管理的基本功能。但并没有登录,就直接访问到了Tlias智能学习辅助系统的后台,这节来实现登录认证。 目录 登录功能登录校验(重点)会话技术会话跟踪方案一 Cookie(客户端会话跟踪技术)会话跟踪方案二…

ROS基础知识复习

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

初始MySQL(三)(合计函数,分组函数,字符串相关函数,数字相关函数,时间日期函数,加密函数,流程控制函数)

目录 合计/统计函数 count 返回行的总数 sum 合计函数 - avg group by 字符串相关函数 数学相关函数 时间日期相关函数 加密函数 流程控制函数 合计/统计函数 count 返回行的总数 Select count(*) | count (列名) from tablename [WHERE where_definition] #演…

xml schema中的sequence的含义

https://www.w3.org/TR/xmlschema-1/#element-sequence xml schema中的sequence的含义:包含的元素必须按规定的顺序出现。通过属性maxOccurs和minOccurs可以定义最多、最少出现的次数。最多可以定义不限制次数,最少可以定义0次。默认是最少出现1次&…

nodejs+vue+python+PHP+微信小程序-安卓- 基于小程序的高校后勤管理系统-计算机毕业设计

考虑到实际生活中在高校后勤管理小程序管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计&#x…

阿里云国际站:云备份

文章目录 一、阿里云云备份的概念 二、云备份的优势 三、云备份的功能 四、云备份的应用场景 一、阿里云云备份的概念 云备份作为阿里云统一灾备平台,是一种简单易用、敏捷高效、安全可靠的公共云数据管理服务,可以为阿里云ECS整机、ECS数据库、文件…

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

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

未来的拥塞控制与 Linux EEVDF 调度器

有破要有立。 前面提到 经典端到端拥塞控制将越来越失效,未来该如何,谈谈我的看法。 端到端拥塞控制的难点根本上是要解决公平性问题,顺带着提高资源利用率。我们很容易理解,在共享资源场景下,不公平一定是低效的&am…

[云原生案例2.4 ] Kubernetes的部署安装 【通过Kubeadm部署Kubernetes高可用集群】

文章目录 1. 基本架构及前置准备1.1 基本架构1.2 前置准备 2. 系统初始化操作 ---- 所有节点2.1 关闭防火墙、selinux和swap分区2.1.1 关闭防火墙和selinux2.1.2 关闭交换分区 2.2 修改主机名,添加域名映射2.2.1 修改主机名2.2.2 修改本地hosts文件 2.3 内核升级2.4…

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.…

RLHF讲解

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

tensorboard报错解决:No dashboards are active for the current data set

版本&#xff1a;tensorboard 2.10.0 问题&#xff1a;文件夹下明明有events文件&#xff0c;但用tensorboard命令却无法显示。 例如&#xff1a; 原因&#xff1a;有可能是文件路径太长了&#xff0c;导致系统无法读取文件。在win系统中规定&#xff0c;目录的绝对路径不得超…

案例续集留言板

前端没有保存数据的功能,后端把数据保存下来(内存,数据库等等......) 前端代码如下 : <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

论文笔记--Baichuan 2: Open Large-scale Language Models

论文笔记--Baichuan 2: Open Large-scale Language Models 1. 文章简介2. 文章概括3 文章重点技术3.1 预训练3.1.1 预训练数据3.1.2 模型架构 3.2 对齐3.2.1 SFT3.2.2 Reward Model(RM)3.2.3 PPO 3.3 安全性 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Baichuan 2…

PyQt制作【小红书图片抓取】神器

文章目录 &#x1f4e2;闲言碎语&#x1f43e;窗口设计&#x1f43e;功能设计&#x1f4da;资源领取 &#x1f4e2;闲言碎语 最近写一个系统&#xff0c;被一个Bug折腾了两天&#xff0c;至今还未解决。由于解决Bug弄得我有点心力憔悴&#xff0c;于是想着写其他小项目玩玩&am…

Halcon WPF 开发学习笔记(2):Halcon导出c#脚本和WPF初步开发

文章目录 前言HalconC#教学简单说明如何二开机器视觉如何二次开发Halcon导出Halcon脚本新建WPF项目&#xff0c;导入Halcon脚本和Halcon命名空间 前言 我目前搜了一下我了解的机器视觉软件&#xff0c;有如下特点 优点缺点兼容性教学视频(B站前三播放量)OpenCV开源&#xff0…

Windows桌面黑屏无法打开软件窗口不显示卡死等解决方案

问题还原 该软件窗口无论如何操作均 无法打开显示的窗口 ,但是 可使用 ALTTab 看到任务视图 目录 问题还原 解决方案 1. 使用 WinR 打开命令窗口 盲输 cmd 2. 盲输 taskkill /f /im explorer.exe 关闭资源管理器 3. 输入 start explorer.exe 启动任务管理器即可恢复正常…

TDD、BDD、ATDD以及SBE的概念和区别

在软件开发或是软件测试中会遇到以下这些词&#xff1a;TDD 、BDD 、ATDD以及SBE&#xff0c;这些词代表什么意思呢&#xff1f; 它们之间有什么关系吗&#xff1f; TDD 、BDD 、ATDD以及SBE的基本概念 TDD&#xff1a;&#xff08;Test Driven Development&#xff09;是一种…

基于飞蛾扑火算法优化概率神经网络PNN的分类预测 - 附代码

基于飞蛾扑火算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于飞蛾扑火算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于飞蛾扑火优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

链表OJ题(4)

目录 10.链表的回文结构 11.随机链表的复制 &#x1f642;找中间节点一定要考虑偶数个和奇数个的问题。 &#x1f642;指针指向的前中后。 &#x1f642;链表节点的位置个数/链表的节点中的数字。&#x1f197;&#x1f197; 今天最后两道链表OJ题目。 10.链表的回文结构…