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的区别

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

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

相关文章

IP多播需要使用两种协议(IGMP和多播路由选择协议)

目录 IGMP 多播路由选择协议 组播协议包括组成员管理协议和组播路由协议: 组成员管理协议用于管理组播组成员的加入和离开(IGMP) 组播路由协议负责在路由器之间交互信息来建立组播树(多播路由选择协议) IGMP 图中标有 IP 地址的四台主机都参加了一个多播组,其…

HCIP-双点双向重发布

实验拓扑 要求:全网没有次优路径、且尽量负载均衡。 设备配置 R1 [V200R003C00] #sysname R1 #snmp-agent local-engineid 800007DB03000000000000snmp-agent #clock timezone China-Standard-Time minus 08:00:00 # portal local-server load flash:/portalpage.…

Springboot快速入门

目录 一、概述 SpringBoot的特性 1、起步依赖 2、自动配置 3、其他特性 二、入门程序 步骤 1、创建Maven工程 2、配置spirng-boot-stater-web起步依赖 3、编写Controller 4、提供启动类 启动 测试 三、信息配置 四、整合mybatis 1、引入依赖 2、配置信息 3、…

php的api接口token简单实现

<?php // 生成 Token function generateToken() {$token bin2hex(random_bytes(16)); // 使用随机字节生成 tokenreturn $token; } // 存储 Token&#xff08;这里使用一个全局变量来模拟存储&#xff09; $tokens []; // 验证 Token function validateToken($token) {gl…

【数据结构】树与二叉树(十三):递归复制二叉树(算法CopyTree)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

pta 高空坠球 Python3

皮球从某给定高度自由落下&#xff0c;触地后反弹到原高度的一半&#xff0c;再落下&#xff0c;再反弹&#xff0c;……&#xff0c;如此反复。问皮球在第n次落地时&#xff0c;在空中一共经过多少距离&#xff1f;第n次反弹的高度是多少&#xff1f; 输入格式: 输入在一行中…

pyTorch Hub 系列#4:PGAN — GAN 模型

一、主题描述 2014 年生成对抗网络的诞生及其对任意数据分布进行有效建模的能力席卷了计算机视觉界。两人范例的简单性和推理时令人惊讶的快速样本生成是使 GAN 成为现实世界中实际应用的理想选择的两个主要因素。 然而&#xff0c;在它们出现后的很长一段时间内&#xff0c;GA…

11.12总结

这一周主要写了个人中心的几个功能&#xff0c;资料修改&#xff0c;收货地址的创建和修改删除&#xff0c;还有主页界面和商品界面

Scikit-LLM:一款大模型与 scikit-learn 完美结合的工具!

Scikit-LLM 是文本分析领域的一项重大变革&#xff0c;它将像 ChatGPT 这样强大的语言模型与 scikit-learn 相结合&#xff0c;提供了一套无与伦比的工具包&#xff0c;用于理解和分析文本。 有了 scikit-LLM&#xff0c;你可以发现各种类型的文本数据中的隐藏模式、情感和上下…

生成式AI - Knowledge Graph Prompting:一种基于大模型的多文档问答方法

大型语言模型&#xff08;LLM&#xff09;已经彻底改变了自然语言处理&#xff08;NLP&#xff09;任务。它们改变了我们与文本数据交互和处理的方式。这些强大的AI模型&#xff0c;如OpenAI的GPT-4&#xff0c;改变了理解、生成人类类似文本的方式&#xff0c;导致各种行业出现…

Spring-ProxyFactory

ProxyFactory选择cglib或jdk动态代理原理 ProxyFactory在生成代理对象之前需要决定是使用JDK动态代理还是CGLIB技术&#xff1a; public class DefaultAopProxyFactory implements AopProxyFactory, Serializable {Overridepublic AopProxy createAopProxy(AdvisedSupport co…

cocosCreator 之 Bundle使用

版本&#xff1a; v3.4.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac Bundle简介 全名 Asset Bundle(简称AB包)&#xff0c;自cocosCreator v2.4开始支持&#xff0c;用于作为资源模块化工具。 允许开发者根据项目需求将贴图、脚本、场景等资源划分在 Bundle 中&am…

从0到0.01入门React | 010.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

实验一 Anaconda安装和使用(Python程序设计实验报告)

实验一 Anaconda安装和使用 一、实验环境 Python集成开发环境IDLE/Anaconda 二、实验目的 1&#xff0e;掌握Windows下Anaconda的安装和配置。 2. 掌握Windows下Anaconda的简单使用&#xff0c;包括IDLE、Jupyter Notebook、Spyder工具的使用。 3. 掌握使用pip管理Python扩展库…

分类预测 | Matlab实现PSO-BiLSTM粒子群算法优化双向长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现PSO-BiLSTM粒子群算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-BiLSTM粒子群算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-BiLSTM粒子…

优酷网页截图黑屏及了解浏览器图形服务API-meethigher

一、背景 周六跟同事逛了上海的豫园、城隍庙、静安寺、静安公园。豫园门票40&#xff0c;相传是明代私人园林&#xff0c;园主人为当年的四川布政使&#xff0c;是江南风格古典园林&#xff0c;风景还不错。 周日天气降温&#xff0c;直接睡了一天&#xff0c;想起同事推荐的《…

Java --- JVM的执行引擎

目录 一、执行引擎概述 1.1、执行引擎的工作过程 二、Java代码编译和执行的过程 三、解释器 3.1、解释器工作机制 3.2、解释器分类 3.3、解释器现状 四、JIT编译器 五、热点代码及探测方式 六、方法调用计数器 6.1、热点衰减 七、回边计数器 八、HotSpot VM设置程序…

用python随机生成座位表

1 问题 学习中总会遇到大大小小的考试&#xff0c;考试场地和考试座位的确立是考试准备工作的重要一环&#xff0c;那么能否用python随机生成座位表呢。 2 方法 定义座位表的行列数&#xff0c;例如10行10列创建一个二维数组&#xff0c;用于存储座位信息&#xff0c;例如使用0…

【KVM】硬件虚拟化技术(详)

前言 大家好&#xff0c;我是秋意零。 经过前面章节的介绍&#xff0c;已经知道KVM虚拟化必须依赖于硬件辅助的虚拟化技术&#xff0c;本节就来介绍一下硬件虚拟化技术。 &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平…

Android Studio真机运行时提示“安装失败”

用中兴手机真机运行没问题&#xff0c;用Vivo运行就提示安装失败。前提&#xff0c;手机已经打开了调试模式。 报错 Android Studio报错提示&#xff1a; Error running app The application could not be installed: INSTALL_FAILED_TEST_ONLY 手机报错提示&#xff1a; 修…