详谈Spring

news2024/12/24 5:44:43

作者:爱塔居

专栏:JavaEE

目录

一、Spring是什么?

1.1 Spring框架的一些核心特点:

二、IoC(控制反转)是什么?

2.1 实现手段

2.2 依赖注入(DI)的实现原理

2.3 优点

三、AOP(面向切面编程)是什么?

3.1 AOP的组成

3.2 AOP实现技术有哪些?

3.3 优点 

四、Bean

4.1 Bean的生命周期


一、Spring是什么?

Spring框架是一种用于构建企业级Java应用程序的开源框架。它提供了一种综合性的编程和配置模型,用于开发灵活、可扩展、可维护的应用程序,用一句话来概括spring,spring是包含了众多工具方法的Ioc容器。

1.1 Spring框架的一些核心特点:

1.轻量级:Spring框架采用了松耦合的设计原则,仅依赖少量的第三方库,开发人员根据选择使用Spring的特定功能,无需引入整个框架。

2.控制反转(Ioc):通过Ioc容器,开发人员可以将对象的创建、组装和生命周期管理交给Spring框架处理。

3.面向切面编程(AOP):可以通过AOP在应用程序中实现横切关注点的模块化。

4.声明式事务管理:通过使用注解或者XML配置,开发人员将事务管理逻辑和业务逻辑分离,并且可以轻松在方法或类级别上应用事务。

5.框架整合:Spring框架可以与许多其他开源框架和技术无缝集成,使得开发人员可以使用Spring框架来整合和协调不同技术。

6.测试支持:Spring框架提供了广泛的测试支持,包括单元测试和集成测试。

二、IoC(控制反转)是什么?

IoC是Spring框架的核心概念之一,用于实现松耦合和可测试的应用程序。在传统的编程模式下,对象之间的创建、组装和管理都是由开发人员手动完成的,而在IoC模式中,对象之间的依赖关系被反转了,即由开发人员手动控制对象之间的依赖关系变为由容器自动注入依赖。

2.1 实现手段

Ioc容器提供以下两种方式来实现控制反转:

1.依赖注入(DI):依赖注入通过将依赖关系注入到对象中,实现了对象之间的解耦。容器负责查找依赖对象,并将其自动注入到相应的对象中。依赖注入可以通过构造函数,Setter方法或接口注入来完成。

2.依赖查找:依赖查找通过容器提供的API,开发人员手动查找和获取所需的依赖对象。开发人员在代码中通过容器提供的接口来获取所需的对象实例,从而实现了对象之间的解耦。

二者区别:依赖注入使将依赖关系委托给容器,由容器来管理对象之间的依赖关系;依赖查找使由对象自己来查找它所依赖的对象,容器只负责管理对象的生命周期。

2.2 依赖注入(DI)的实现原理

DI是通过反射机制实现的。在Spring框架中,当容器创建了一个对象时,它会检测该对象的依赖关系,并使用反射机制查找依赖对象,然后容器将依赖对象注入到该对象中。

当使用@Autowired注释时,Spring容器会自动查找与该类型匹配的bean,并将其注入到该字段中。如果有多个匹配的bean,则可以使用@Qualifier注释来指定要注入的bean的名称。当使用@Value注释时,Spring容器会将属性值注入到该字段中,属性值可以从配置文件中读取,也可以时硬编码的值。

2.3 优点

相比于传统的程序开发,使用IoC的好处在于:

1.降低了传统代码之间的耦合度,使程序变得简单

2.可维护性号,对象更易扩展和重用

3.Ioc容器管理对象,简化开发难度,节省开发时间

三、AOP(面向切面编程)是什么?

AOP是一种软件开发的编程范式,用于将跨越多个模块的关注点从核心业务逻辑中分离出来,使得横切关注点的定义和应用能够更加集中和重用。

3.1 AOP的组成

切面:切面是横切关注点的模块化单元,将通知和切点组合在一起,描述了在何处、何时和如如何应用横切关注点。

切点:用于定义哪些连接点被切面关注,即切面要织入的具体位置

连接点:在程序执行过程中,某个特定点,例如方法调用、异常抛出等

通知:切面在特定切点上执行的代码,包括在连接点之前、之后或周围执行的行为

织入:将切面应用到目标对象中的工程中,可以在编译时、加载时或运行时进行

3.2 AOP实现技术有哪些?

常见实现技术有以下两种:

1.静态代理:静态代理是一种在编译时就已经确定代理关系的代理方式。在静态代理中,代理类和被代理类都要实现同一个接口或继承同一个父类,代理类中包含了被代理类的实例,并在调用被代理类的方法前后执行相应的操作。静态代理的优点是实现简单,易于理解和掌握,但是它的缺点是需要为每个被代理类编写一个代理类,当被代理类的数量增多时,代码量会变得很大。

2.动态代理:动态代理是一种在运行时动态生成代理类的代理方式。在动态代理中,代理类不需要实现同一个接口或继承同一个父类,而是通过 Java 反射机制动态生成代理类,并在调用被代理类的方法前后执行相应的操作。动态代理的优点是可以为多个被代理类生成同一个代理类,从而减少了代码量,但是它的缺点是实现相对复杂,需要了解 Java 反射机制和动态生成字节码的技术。

3.3 优点 

1.将横切关注点从应用程序的核心业务逻辑中分离出来,便于更好地实现模块化和复用

2.可以将通用的概念(如日志记录、性能统计、事务管理)封装成切面,如何在需要的地方进行重用,从而提高代码的可维护性和可重用性)

四、Bean

在Spring中,Bean是指被Spring容器管理的对象。

4.1 Bean的生命周期

在Spring中,Bean的生命周期指的是Bean实例从创建到销毁的整个过程。

Bean的生命周期可以分为以下几个阶段:

1.实例化

在Spring容器启动时,会根据配置文件或注解等方式创建Bean的实例,也就是说实例化就是为了Bean对象分配内存空间。根据Bean的作用域不同,实例化的方式也不同

2.属性赋值

在Bean实例化后,Spring容器会自动将配置文件或注解中的属性值注入到Bean中。属性注入可以通过构造函数注入、Setter方法注入、注解注入等方式实现。

3.初始化

在属性注入完成后,Spring容器会调用Bean的初始化方法。在初始化方法中,可以进行一些初始化操作,例如建立数据库、加载配置文件等

4.使用

在Bean初始化完成后,Bean就可以被应用程序使用了。在应用程序中,可以通过Spring容器获取Bean的实例,并调动Bean的方法。

5.销毁

在应用程序关闭时,Spring容器会自动销毁所有的Bean实例。在销毁方法中,可以进行一些清理操作,例如释放资源、关闭数据库连接等。

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

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

相关文章

时序分解 | Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解

时序分解 | Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间…

连续爆轰发动机

0.什么是爆轰 其反应区前沿为一激波。反应区连同前驱激波称为爆轰波。爆轰波扫过后,反应区介质成为高温高压的爆轰产物。能够发生爆轰的系统可以是气相、液相、固相或气-液、气-固和液-固等混合相组成的系统。通常把液、固相的爆轰系统称为炸药。 19世纪80年代初&a…

子监督学习的知识点总结

监督学习 机器学习中最常见的方法是监督学习。在监督学习中,我们得到一组标记数据(X,Y),即(特征,标签),我们的任务是学习它们之间的关系。但是这种方法并不总是易于处理&…

基于微信小程序的付费自习室

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 需求分析3.1用户需求分析3.1.1 学生用户3.1.3 管理员用户 4 数据库设计4.4.1 E…

定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”

各位CSDN的uu们好呀,今天,小雅兰的内容是51单片机中的定时器以及按键控制LED流水灯模式&定时器时钟,下面,让我们进入51单片机的世界吧!!! 定时器 按键控制LED流水灯模式 定时器时钟 源代…

Mac电脑BIM建模软件 Archicad 26 for Mac最新

ARCHICAD 软件特色 智能化 在2D CAD中,所有的建筑构件都由线条构成和表现,仅仅是一些线条的组合而已,当我们阅读图纸的时候是按照制图规范来读取这些信息。我们用一组线条表示平面中的窗,再用另一组不同的线条在立面中表示同一个…

C++11——神奇的右值引用与移动构造

文章目录 前言左值引用和右值引用右值引用的使用场景和意义右值引用引用左值万能引用右值引用的属性完美转发新的默认构造函数强制和禁止生成默认函数 总结 前言 本篇博客将主要讲述c11中新添的新特性——右值引用和移动构造等,从浅到深的了解这个新特性的用法&…

创意填充文本悬停效果

效果展示 CSS 知识点 text-shadow 属性实现 3D 文字clip-path 属性的运用 实现页面基础结构布局 <div class"container"><!-- 使用多个h2标签来实现不同颜色的3D文字 --><h2>Text</h2><h2>Text</h2><h2>Text</h2>…

好奇喵 | Tor浏览器——如何拥有一颗洋葱并使用

前言 在之前的博客中&#xff1a; 1.Surface Web —&#xff1e; Deep Web —&#xff1e; Dark Web&#xff0c;我们解释了表层网络、深层网络等的相关概念&#xff1b; 2.Tor浏览器——层层剥开洋葱&#xff0c;我们阐述了Tor的历史和基本工作原理&#xff1b; 本篇博客介…

笔记--总线舵机YB-SD15M--stm32

文章目录 前言一、官方文档的理解1.发送格式2.命令地址 二、控制文件1.c2.h 文件 前言 使用stm32控制这个总线舵机。 舵机为总线舵机。一定要配合控制板一起用&#xff0c;不然只使用stm32无法控制。 一、官方文档的理解 1.发送格式 发送格式如下&#xff0c;其中的指令类型…

2023版 STM32实战6 输出比较(PWM)包含F407/F103方式

输出比较简介和特性 -1-只有通用/高级定时器才能输出PWM -2-占空比就是高电平所占的比例 -3-输出比较就是输出不同占空比的信号 工作方式说明 -1-1- PWM工作模式 -1-2- 有效/无效电平 有效电平可以设置为高或低电平&#xff0c;是自己配置的 周期选择与计算 周期重…

成都建筑模板批发市场在哪?

成都作为中国西南地区的重要城市&#xff0c;建筑业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料之一&#xff0c;在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场&#xff0c;广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…

首饰饰品经营商城小程序的作用是什么

首饰如耳钉、戒指、手镯等除了高价值产品外&#xff0c;还有很多低价产品&#xff0c;市场需求客户众多&#xff0c;在实际经营中&#xff0c;商家们也会面临一些痛点。 私域话题越来越多加之线上线下同行竞争、流量匮乏等&#xff0c;更对商家选择自建商城经营平台。 通过【…

mybatise-plus的id过长问题

一、问题情景 笔者在做mp插入数据库(id已设置为自增)操作时&#xff0c;发现新增数据的id过长&#xff0c;结果导致前端JS拿到的数据出现了精度丢失问题&#xff0c;原因是后端id的类型是Long。在网上查了一下&#xff0c;只要在该属性上加上如下注解就可以 TableId(value &q…

酷炫的文字悬停效果

效果展示 CSS 知识点 text-transform 属性中 uppercase 的值运用 实现页面基础结构 <h2 class"text">Vanilla JavaScript</h2>使用 JS 把标题拆分成单个 Span 标签 let text document.querySelector(".text"); text.innerHTML text.inne…

基于SpringBoot的高考志愿填报系统

功能需求&#xff1a; 1.用户可以根据自己的院校类型、办学类型、层次类型、地域等因素筛选高校。 2.用户可以查询到所选高校的基本信息&#xff0c;包括学校的概况、历史沿革、办学特色、学院设置、师资力量、科研实力等。 3.用户可以查询到所选高校的高校开设专业&#xff0c…

学习记忆——方法篇——联想法+记忆宫殿+数字编码

左右脑在记忆当中的不同特点&#xff1a; 左脑是我们的理性脑。主要功能是处理逻辑内容、以及数字、文字等信息&#xff0c;擅长对知识的分析、理解、归纳、整合。缺点是处理信息速度慢、效率低&#xff0c;死记硬背就是用左脑记忆。 右脑是我们的感性脑。主要功能是处理节奏、…

初识Java 12-3 流

目录 终结操作 将流转换为一个数组&#xff08;toArray&#xff09; 在每个流元素上应用某个终结操作&#xff08;forEach&#xff09; 收集操作&#xff08;collect&#xff09; 组合所有的流元素&#xff08;reduce&#xff09; 匹配&#xff08;*Match&#xff09; 选…

Java 8新特性:DateTime、Lambda、Stream的强大功能解析

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java 8新特性&#xff1a;DateTime、Lambda、Stream的强大功能解析 ⏱️…

案例题--Web应用考点

案例题--Web应用考点 负载均衡技术微服务XML和JSON无状态和有状态真题 在选择题中没有考察过web的相关知识&#xff0c;主要就是在案例分析题中考察 负载均衡技术 应用层负载均衡技术 传输层负载均衡技术 就近的找到距离最近的服务器&#xff0c;并进行分发 使用户就近获取…