Spring简述

news2025/1/20 1:57:10

  • Sping是什么
  • Spring主要模块
  • IOC
    • DI依赖注入的三种方式
  • AOP
    • 术语

Sping是什么

Spring是一个轻量级的开源框架,主要作用是为了简化开发,它以IOC(控制反转)和AOP(面向切面编程)为内核

Spring主要模块

我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发

1.核心容器(Spring Core):提供Spring框架的基本功能,以bean的方式组织和管理Java应用中的各个组件及其关系。
2.应用上下文(Spring Context):实现了ApplicationContext接口,拓展了核心容器,提供事件处理、国际化等功能。
3.Spring面向切面编程(Spring AOP):提供切面支持,是个轻量级的容器。通过使用Spring AOP,可以将声明性事务管理集成在应用程序中。
4.JDBC和DAO模块(Spring DAO):提供对JDBC的支持,还提供了DAO的支持,提供事务支持
5.对象实体映射(Spring ORM):指对象实体映射。Spring插入了若干个ORM框架,提供了ORM对象的关系工具
6.Web模块(Spring Web):拓展了Spring上下文,提供Web应用上下文,对Web开发提供功能上的支持
7.MVC模块(Spring Web MVC):是一个全功能的MVC实现,通过策略接口,编程高度可配置

IOC

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法

Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)

举个例子,姐姐结婚,需要筹备婚礼的各种事宜,比如选购婚纱、订婚宴、找化妆师等等。在没有使用IOC的时候,这些事情需要你亲自去处理。但是当你开始使用IOC的时候,你就可以委托一个婚庆公司来帮助你处理婚礼筹备的事务,你只需要告诉婚庆公司你的需求和预算,他们会负责为你安排婚纱、宴会预定、化妆师等等,你不再需要亲自去处理每一个细节,而是将控制权交给了婚庆公司。
其中,婚庆公司就是一个IOC容器。它接管了婚礼筹备的过程,你只需要告诉它需求,它就会为你安排。同样的,在我们开发当中,IOC容器也可以帮助我们管理对象的创建和依赖关系。我们只需要告诉IOC容器我们需要的对象和依赖它会负责创建和注入这些对象,我们无需自己控制每一个细节。这样,就简化了开发过程降低了耦合性,也提高了代码的可测试性和可维护性,我们也可以专注于业务逻辑的实现,从而提高开发效率

DI依赖注入的三种方式

所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程(将依赖关系注入到对象中)

在上述例子中,姐姐结婚需要化妆师吧,而化妆师就是一个依赖,在没有使用依赖注入的情况下,你需要自己去找一个化妆师,当你使用依赖注入时,你只需要将你需要化妆师告诉婚庆公司,然后婚庆公司会选择一个合适的化妆师,将这个化妆师实例注入到婚礼筹备的流程中

spring的依赖注入有3种方式

  • set注入
    • 通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式
  • 构造器注入
    • 构造函数注入是除属性注入之外的另一种常用的注入方式,它保证一些必要的属性在Bean实例化时就得到设置(construct是bean生命周期的第一步,实例化bean),并且确保了Bean实例在实例化后就可以使用
  • 自动装配
    • 依赖注入的本质就是装配——自动装配:spring可以使用xml和注解来进行自动装配。自动装配就是开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成,自动装配就是为了将依赖注入“自动化”的一个简化配置的操作

AOP

AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

举个例子,姐姐结婚,你希望在姐姐结婚的过程中,能够自动触发一些特定的行为,比如发送祝福短信、安排婚礼摄影师等,这个时候,我们就可以使用AOP来实现。
我们可以定义一个安排婚礼摄影师的切面,里面有相关的方法,我们可以将这个切面与姐姐结婚的业务逻辑代码进行织入,从而实现在姐姐结婚的时候自动安排婚礼摄影师的功能。如此,无论是新增或修改什么东西,我们只需要修改对应的切面,而不需要修改姐姐结婚的业务逻辑代码。这样就实现了横向关注点的分离,通过将通用的横切关注点(如发送祝福短信、安排婚礼摄影师)从姐姐结婚的业务逻辑中抽离出来,通过AOP框架实现与业务逻辑的织入,从而实现对姐姐结婚过程的增强,提高了代码的可维护性和可扩展性

术语

  • 横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …
  • 切面(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。
  • 通知(Advice):切面必须要完成的工作。即,它是类中的一个方法。
  • 目标(Target):被通知对象。
  • 代理(Proxy):向目标对象应用通知之后创建的对象。
  • 切入点(PointCut):切面通知 执行的 “地点”的定义。
  • 连接点(JointPoint):与切入点匹配的执行点。

在这里插入图片描述

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

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

相关文章

cocosCreator 之 i18n多语言插件

版本: v3.4.0 环境: Mac 简介 i18n是国际化的简称, 全名:internationalization;取首尾字符i和n,18代表单词中间的字符数目。 该插件不需要产品做太多的改变,通过语言的设置,实现不…

P1194 买礼物(最小生成树)(内附封面)

买礼物 题目描述 又到了一年一度的明明生日了,明明想要买 B B B 样东西,巧的是,这 B B B 样东西价格都是 A A A 元。 但是,商店老板说最近有促销活动,也就是: 如果你买了第 I I I 样东西&#xff0…

【逗老师的PMP学习笔记】6、项目的进度管理

目录 一、规划进度管理1、【关键输出 】进度管理计划 二、定义活动1、【关键工具】拆解2、【关键工具】滚动式规划3、【关键输出】活动清单和活动属性4、【关键输出】里程碑清单 三、排列活动顺序1、【关键工具】紧前关系绘图法2、【关键工具】提前量和滞后量3、【关键输出】项…

Linux 中使用 verdaccio 搭建私有npm 服务器

安装 Node Linux中安装Node 安装verdaccio npm i -g verdaccio安装完成 输入verdaccio,出现下面信息代表安装成功,同时输入verdaccio后verdaccio已经处于运行状态,当然这种启动时暂时的,我们需要通过pm2让verdaccio服务常驻 ygiZ2zec61wsg…

网络编程——深入理解TCP/IP协议——OSI模型和TCP/IP模型:构建网络通信的基石

TCP/IP协议— 一、简介 TCP/IP协议,即传输控制协议/互联网协议,是一组用于在计算机网络中实现通信的协议。它由两个主要的协议组成:TCP(传输控制协议)和IP(互联网协议)。TCP负责确保数据的可靠…

【Linux取经路】冯诺依曼结构体系与操作系统的碰撞

文章目录 一、冯诺依曼体系结构1.1 硬件介绍1.2 内存的重要性 二、操作系统2.1 设计操作系统的目的2.2 操作系统是如何进行管理的? 一、冯诺依曼体系结构 我们现在常见的计算机,如笔记本,以及我们不常见的计算机,如服务器&#x…

Pycharm连接服务器

前提:必须为pycharm专业版才能连接到服务器 以下为pycharm2023专业版 一、连接 系统环境 虚拟环境(前提:已安装anaconda) (1) anaconda环境 (2) 自己创建的虚拟环境 这里为envs下的spotr 二、查看连接情况 选择自动上传

Docker 发布一个springboot项目

文章目录 1、新建SpringBootDemo项目并打包2、使用Dockerfile打包(基础用法)进一步maven源码打包法 3、更进一步(maven插件打包)docker-maven-pluginspring-boot-maven-plugin前提条件本地环境配置项目环境配置maven插件打包运行校…

一文让你了解网络安全和云安全的区别与联系

相信大家对于网络安全和云安全的关系不是很了解,今天小编就和大家来一起聊聊网络安全和云安全的区别与联系,仅供参考哦! 网络安全和云安全的区别 1、两者定义不同。网络安全通常指计算机网络的安全,实际上也可以指计算机通信网络…

同源策略简单解释

浏览器同源策略 什么时同源策略 协议、域名(IP)、端口相同即为同源。浏览器的同源策略是一种约定,是浏览器最核心也是最基本的安全功能,如果浏览器少了同源策略,则浏览器的正常功能可能都会受到影响。 http://192.168.200.131/user/1 https…

全景图!最近20年,自然语言处理领域的发展

夕小瑶科技说 原创 作者 | 小戏、Python 最近这几年,大家一起共同经历了 NLP(写一下全称,Natural Language Processing) 这一领域井喷式的发展,从 Word2Vec 到大量使用 RNN、LSTM,从 seq2seq 再到 Attenti…

【产品经理】高阶产品如何提出有效解决方案?(1方法论+2案例+1清单)

每一件事情总有它的解决方案,在工作中亦是如此,而有效的解决方案,一定是具有系统性的。 有效的解决方案,一定是系统性的解决方案。 什么是系统性解决方案? 从系统结构(或连接关系)入手&#x…

生成2×2 或3*3 混淆矩阵(confusion matrix)的python代码

该代码可以生成22的混淆矩阵。每个矩阵对应的数值可以自行改变。 代码如下: import numpy as np import matplotlib.pyplot as plt# 随机生成值 import numpy as np import matplotlib.pyplot as plt# 创建一个2x2的二分类数据矩阵。这里可以手动改变值 data np…

拨开迷雾:利用全链路消息跟踪揭示系统奥秘

在分布式系统,一次外部请求往往需要内部多个模块,多个中间件,多台机器的相互调用才能完成。在这一系列的调用中,可能有些是串行的,而有些是并行的,排查定位非常困难。 全链路消息分析及全链路消息跟踪可以帮…

C# 简单模拟 程序内部 消息订阅发布功能

文章目录 前言模拟消息订阅发布使用注意事项 前言 我想做个简单的消息发布订阅功能,但是发现好像没有现成的工具类。要么就是Mqtt这种消息订阅发布。但是我只想程序内部进行消息订阅发布,进行程序的解耦。那没办法了,只能自己上了 模拟消息…

yolo-v5学习(使用yolo-v5进行安全帽检测错误记录)

常见错误 跑YOLOv5遇到的问题_runtimeerror: a view of a leaf variable that requi_Pysonmi的博客-CSDN博客 python train.py --img 640 --batch 16 --epochs 10 --data ./data/custom_data.yaml --cfg ./models/custom_yolov5.yaml --weights ./weights/yolov5s.pt 1、梯度…

实例032 动画显示窗体

实例说明 当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以…

小黑子—JavaWeb:第六章 - Filter、Listener、AJAX与JSON

JavaWeb入门6.0 1. Filter1.1 Filter快速入门1.2 Filter执行流程1.3 Filter拦截路径配置1.4 Filter过滤器链1.5 案例登录验证 2. Listener2.1 ServletContextListener使用 3. AJAX3.1 AJAX 快速入门3.2 案例 验证用户名是否存在3.3 Axios 异步框架3.3.1 Axios 快速入门3.3.2 Ax…

自动驾驶新方法登Nature封面:让黑夜如白昼般清晰,浙大博士一作

摘要: 通过克服传统解决方案中的“重影”问题,这种方法在基准测试中一显巨大优势,不仅能像白天一样看清环境的纹理和深度,还能感知到RGB、热视觉以外的各种物理信息,可谓相当利好机器感知尤其是自动驾驶行业。 利用AI…

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…