当前位置: 首页 > news >正文

详谈Spring

作者:爱塔居

专栏: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实例。在销毁方法中,可以进行一些清理操作,例如释放资源、关闭数据库连接等。

五、Spring中使用了哪些设计模式?

1.工厂模式

工厂模式是一种创建型设计模式,提供了一种创建对象的方式,使得应用程序可以更加灵活和可维护。

2.单例模式

单例模式是一种创建型设计模式,保证一个类只有一个实例,并提供了一个全局访问点。在Spring中,Bean默认是单例的,这意味着每个Bean只会被创建一次,并且可以在整个应用程序中共享。

3.代理模式

代理模式是一种结构性设计模式,允许开发人员在不修改原有代码的情况下,向应用程序中添加新的功能,

4.观察者模式

观察者模式是一种行为型设计模式,定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

5.模板方法模式

模板方法模式时一种行为型设计模式,定义了一个算法的骨架,将一些步骤延迟道子类中实现。

6.设配器模式

适配器模式是一种结构性设计模式,允许开发人员将一个类的接口转换成另一个类的接口,以满足客户端的需求。

7.策略模式

策略模式是一种行为型设计模式,定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。

相关文章:

详谈Spring

作者:爱塔居 专栏:JavaEE 目录 一、Spring是什么? 1.1 Spring框架的一些核心特点: 二、IoC(控制反转)是什么? 2.1 实现手段 2.2 依赖注入(DI)的实现原理 2.3 优点 三、AO…...

PyTorch入门之【AlexNet】

参考文献:https://www.bilibili.com/video/BV1DP411C7Bw/?spm_id_from333.999.0.0&vd_source98d31d5c9db8c0021988f2c2c25a9620 AlexNet 是一个经典的卷积神经网络模型,用于图像分类任务。 目录 大纲dataloadermodeltraintest 大纲 各个文件的作用&…...

(六)正点原子STM32MP135移植——内核移植

目录 一、概述 二、编译官方代码 三、移植 四、编译 一、概述 前面已经移植好了TF-A、optee、u-boot,在u-boot能正常跑起来的情况下,现在来移植内核。 二、编译官方代码 进入kernel目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf linux-6.1.28.…...

自媒体工作内容管理助手

内容助手 访问地址:editor.yunwow.cn 背景介绍 最近在学习流量运营, 流量运营的第一站是内容创作, 我试过不少原创内容,都是跟生活相关的例如:录一段联琴的视频、录一段秋天的风景、写一段生活感悟、发一段小宠物的生…...

Echarts 教程一

Echarts 教程一 可视化大屏幕适配方案可视化大屏幕布局方案Echart 图表通用配置部分解决方案1. titile2. tooltip3. xAxis / yAxis 常用配置4. legend5. grid6. series7.color Echarts API 使用全局echarts对象echarts实例对象 可视化大屏幕适配方案 rem flexible.js 关于flex…...

【Kubernetes】Kubernetes 对象是什么?

什么是 Kubernetes 对象?常见的 Kubernetes 对象参考🔎感谢 💖 什么是 Kubernetes 对象? Kubernetes 对象是持久化的实体,用于描述整个集群的状态和配置。它们是在 etcd 等持久化存储中存储的,因此它们的状…...

【C++设计模式之模板模式】分析及示例

C之模板模式 描述实现原理示例步骤1步骤1 分析步骤2步骤2 分析调用输出结果 结论 描述 模板模式(Template Pattern)是设计模式中的一种行为型模式。 该模式定义一个操作中的算法骨架,而将具体的算法实现延迟到子类中。 模板模式使得子类可以…...

C#捕捉全局异常

1.运行图片 2.源码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;namespace 捕捉全局异常 {internal static class Program{/// <summary>/// 应用程序的主入口点。/// </summary…...

java.text.ParseException: Unparseable date: “2023-09-06T09:08:18“

问题描述&#xff1a; java.text.ParseException: Unparseable date: “2023-09-06T09:08:18” 这是在String类型转Date类型出现的错误,主要是String类型时间中间有一个T在转换的过程出现问题. 解决方法&#xff1a; SimpleDateFormat simpleDateFormat new SimpleDateFormat…...

macOS 下如何优雅的使用 Burp Suite 汉化

转载 https://www.sqlsec.com/2019/11/macbp.html 主要内容是根据上面的来的 下面总结个人出现错误的地方 主要是优雅配置方面 不要直接复制粘贴 看清楚人家的内容 下面的可以直接复制粘贴 --add-opensjava.desktop/javax.swingALL-UNNAMED --add-opensjava.base/java.lang…...

进程同步与进程互斥

1.进程同步 知识点回顾: 进程具有异步性的特征。 异步性是指&#xff0c;各并发执行的进程以各自独立的、不可预知的速度向前推进。 如何解决这种异步问题&#xff0c;就是“进程同步”所讨论的内容。 同步亦称直接制约关系&#xff0c;它是指为完成某种任务而建立的两个或多…...

公司安防工程简要介绍及系统需求分析

多年来 从事安保监控领域的经验&#xff0c;在系统的功能要求、设备选型、施 工控制、 后期维护、人员配备等各方面反复论证&#xff0c;最终形成了本方案。在系统 的硬件选择上&#xff0c;把系统的稳定性、安全性、可靠性放在第一位。根据 招标文件的要求选用当今安防行业具…...

JMETER自适应高分辨率的显示器

系列文章目录 历史文章 每天15分钟JMeter入门篇&#xff08;一&#xff09;&#xff1a;Hello JMeter 每天15分钟JMeter入门篇&#xff08;二&#xff09;&#xff1a;使用JMeter实现并发测试 每天15分钟JMeter入门篇&#xff08;三&#xff09;&#xff1a;认识JMeter的逻辑控…...

Linux工具(三)

继Linux工具&#xff08;一&#xff09;和Linux工具&#xff08;二&#xff09;&#xff0c;下面我们就来讲解Linux最后的两个工具&#xff0c;分别是代码托管的版本控制器git和代码调试器gdb。 目录 1.git-版本控制器 从0到1的实现git代码托管 检测并安装git 新建git仓库…...

基于SSM+Vue的鲜花销售系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

矢量图形编辑软件illustrator 2023 mac特点介绍

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软件&am…...

【计算机网络面试题(62道)】

文章目录 计算机网络面试题&#xff08;62道&#xff09;基础1.**说下计算机网络体系结构2.说一下每一层对应的网络协议有哪些&#xff1f;3.那么数据在各层之间是怎么传输的呢&#xff1f; 网络综合4.**从浏览器地址栏输入 url 到显示主页的过程&#xff1f;5.说说 DNS 的解析…...

JVM-满老师

JVM 前言程序计数器&#xff0c;栈&#xff0c;虚拟机栈&#xff1a;本地方法栈&#xff1a;堆&#xff0c;方法区&#xff1a;堆内存溢出方法区运行时常量池 垃圾回收垃圾回收算法分代回收 前言 JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class 的文件&#xff…...

加锁常见的问题

锁其是用来控制在某些场景下让代码串行的工具。我们为了充分利用计算机的硬件性能&#xff0c;发明了多线程&#xff0c;多线程有好处&#xff0c;但同时也有它复杂的一面&#xff0c;必须控制好多个线程的执行&#xff0c;才能驯服这个有能力也有脾气的烈马。 一、加锁范围误区…...

【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)

目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、归并排序思想 2.2.1、画图详细讲解 2.2.2、归并排序解决逆序对的代码实现 1、题目介绍 首先阅读题目可以得出要点&#xff0c;即当前数大于后数时则当作一个【逆序对】&#xff0c;而题目是要求在一个数组中计算一共存…...

python经典百题之一个素数能被几个9整除

题目:判断一个素数能被几个9整除。 首先&#xff0c;我们需要明确素数的定义&#xff1a;素数是大于1&#xff0c;且只能被1和自身整除的整数。 下面将分别介绍三种实现方法&#xff0c;每种方法附上解题思路、实现代码、以及优缺点。最后&#xff0c;将对这三种方法进行总结…...

Thymeleaf 内联语法使用教程

1 表达式内联 Thymeleaf标准方言允许使用标签属性(th:)来实现很多的功能&#xff0c;但在有些场景之下&#xff0c;需要将表达式直接写入HTML 代码中和CSS代码中及JavaScript代码中【代码和html文件在一起&#xff0c;分能不开&#xff0c;待验证&#xff0c;有验证的朋友可…...

Django学习笔记-实现聊天系统

笔记内容转载自 AcWing 的 Django 框架课讲义&#xff0c;课程链接&#xff1a;AcWing Django 框架课。 CONTENTS 1. 实现聊天系统前端界面2. 实现后端同步函数 1. 实现聊天系统前端界面 聊天系统整体可以分为两部分&#xff1a;输入框与历史记录。 我们需要先修改一下之前代…...

C++转换函数

什么是转换函数? C转换函数是一种特殊的成员函数&#xff0c;用于将一个类的对象转换为另一个类型。它是通过在类中定义特定的函数来实现的。 转换函数的用途&#xff1a; 类型转换&#xff1a;转换函数可以将一个类的对象从一种类型转换为另一种类型。这样可以方便地在不同…...

Spring Boot中的@Controller使用教程

一 Controller使用方法&#xff0c;如下所示&#xff1a; Controller是SpringBoot里最基本的组件&#xff0c;他的作用是把用户提交来的请求通过对URL的匹配&#xff0c;分配个不同的接收器&#xff0c;再进行处理&#xff0c;然后向用户返回结果。下面通过本文给大家介绍Spr…...

【17】c++设计模式——>原型模式

原型模式的定义 c中的原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;其目的是通过复制&#xff08;克隆&#xff09;已有对象来创建新的对象&#xff0c;而不需要显示的使用构造函数创建对象&#xff0c;原型模式适用于创建复杂对象时&a…...

金三银四好像消失了,IT行业何时复苏!

文章目录 1. 宏观经济形势2. 技术发展趋势3. 教育与培训4. 远程工作和自由职业5. 行业需求和公司招聘计划结论 &#x1f389;欢迎来到Java面试技巧专栏~金三银四好像消失了&#xff0c;IT行业何时复苏&#xff01; ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&…...

PDF文件超出上传大小?三分钟学会PDF压缩

PDF作为一种流行的文档格式&#xff0c;被广泛用于各种场合&#xff0c;然而有时候PDF文件的大小超出了上传限制&#xff0c;这时候我们就需要采取一些措施来减小PDF文件的大小&#xff0c;下面就给大家分享几个方法&#xff0c;一起来学习下吧~ 方法一&#xff1a;嗨格式压缩大…...

java入坑之国际化编程

一、字符编码 1.1概述 字符编码 --字符&#xff1a;0&#xff0c;a,我&#xff0c;①&#xff0c;,… --计算机只用0和1,1bit(0或者1) --ASCIL码(American Standard Code for Information Interchange) 美国信息交换标准代码&#xff0c;奠定计算机编码基础用一个字节(1Byte8b…...

Kafka客户端核心参数详解

这一部分主要是从客户端使用的角度来理解 Kakfa 的重要机制。重点依然是要建立自己脑海中的 Kafka 消费模型。Kafka 的 HighLevel API 使用是非常简单的&#xff0c;所以梳理模型时也要尽量简单化&#xff0c;主线清晰&#xff0c;细节慢慢扩展。 一、从基础的客户端说起 Kaf…...

广德县城乡和建设委员会网站/西安企业做网站

介绍 如果说在机器学习领域有哪个优化算法最广为认知&#xff0c;用途最广&#xff0c;非梯度下降算法莫属。梯度下降算法是一种非常经典的求极小值的算法&#xff0c;比如在线性回归里我们可以用最小二乘法去解析最优解&#xff0c;但是其中会涉及到对矩阵求逆&#xff0c;由…...

wordpress 服务器环境/无锡seo公司哪家好

以后自己看自己的博客的话&#xff0c;我选择死亡。 divmod(a,b) #返回a//b的值和余数 s divmod(97,10)print(s) n1, n2 divmod(89,5) print(n1,n2) isinstance() #判断对象是否是某个类的实例filter(函数&#xff0c;可迭代对象)li [11,22,33,44,55] ret filter(lambda a:…...

潍坊做网站联系方式/每日国际新闻最新消息

http://bbs.51cto.com/thread-807842-1.html转载于:https://blog.51cto.com/6240858/1124205...

wordpress openbox主题/友情链接的概念

在 Linux 上安装 Wine如果您正在使用 Red Hat 或者 SUSE&#xff0c;最简单的方法是从 CD 安装 Wine。不过&#xff0c;如果那些 CD 比较老&#xff0c;您可能需要通过源文件安装&#xff0c;因为 Wine 项目经常更新。如果通过源文件安装&#xff0c;您会发现 Wine 用户指南(参…...

怎么编辑网站内容/草根站长工具

编辑&#xff1a;ll SFF2004-ASEMI高耐压快恢复二极管SFF2004 型号&#xff1a;SFF2004 品牌&#xff1a;ASEMI 封装&#xff1a;ITO-220AB 恢复时间&#xff1a;35ns 电流&#xff1a;20A 电压&#xff1a;400V 引脚数量&#xff1a;3 芯片个数&#xff1a;2 芯片尺…...

邯郸网站建设/网站优化网站

顶端迭代器 给定一个迭代器类的接口&#xff0c;接口包含两个方法&#xff1a; next() 和 hasNext()。设计并实现一个支持 peek() 操作的顶端迭代器 – 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。 很无聊的一道题&#xff0c;无非是考一个提前量而已 /** Bel…...