详谈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.策略模式

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

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

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

相关文章

Qt扩展-Advanced-Docking 简介及配置

Advanced-Docking 简介及配置 一、概述二、项目结构三、安装配置四、代码测试 一、概述 Advanced-Docking 是类似QDockWidget 功能的多窗口停靠功能的库。很像visual stdio 的 停靠功能,这个库对于停靠使用的比较完善。很多的软件都使用了这个框架。 项目源地址&a…

H3C交换机 DEV/1/FAN_DIRECTION_NOT_PREFERRED

1.现象 DEV/1/FAN_DIRECTION_NOT_PREFERRED: Fan 1 airflow direction is not preferred on slot 1, please check it. 2.解决方法: 查看下设备风扇的颜色,风扇分为红色与蓝色,不通颜色通风方式不通。 我这里的风扇是蓝色,修改…

亚马逊计划向开创性的人工智能初创公司Anthropic投资高达4亿美元

原创 | 文 BFT机器人 在一项巨大而突破性的举措中,亚马逊公布了向人工智能初创公司Anthropic投资高达4亿美元的计划,其愿景是创建更易于理解和可控的人工智能系统。此次合作标志着亚马逊打算在人工智能领域率先取得进步,巩固其在技术领域的地…

【已解决】Pyecharts折线图,只有坐标轴没有折线数据

【已解决】Pyecharts折线图,只有坐标轴没有折线数据 1、问题复现2、原因3、问题解决 1、问题复现 在做简单的数据通过 Pyecharts 生成折现图的时候,一直只有坐标轴没有折线数据,但是代码一直看不出问题,代码如下: im…

python scanpy spatial空转全流程

Spatial mapping of cell types across the mouse brain (1/3) - estimating reference expression signatures of cell types — cell2location documentation Spatial mapping of cell types across the mouse brain (2/3) - cell2location — cell2location documentation #…

尤雨溪:Vite的现状与未来展望

10 月 5 日 - 6 日,ViteConf 2023 在线举行,Vue 和 Vite 的创建者尤雨溪发表了题为《The State of Vite》 的演讲,他分享了 Vite 的现状与未来展望,本文就来看一看 Vite 现在怎么样了,以及未来的路将怎么走&#xff01…

halcon 中文识别

文章目录 简单的阈值处理发现颜色不统一,把‘游’字选出来膨胀处理把字扣下来进行阈值处理训练模型 简单的阈值处理 dev_close_window() **基于自定义中文识别库识别名称 read_image(Image,C:/Users/Augustine/Desktop/西游记.png) get_image_size(Image,Width,Hei…

springboot整合mybatis入门程序

1.准备工作(创建springboot工程、数据库表user、实体类User) 创建数据表: create table user(id int unsigned primary key auto_increment comment ID,name varchar(100) comment 姓名,age tinyint unsigned comment 年龄,gender tinyint unsigned comment 性别, 1…

计算机竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…

工信部教考中心:什么是《研发效能(DevOps)工程师》认证,拿到证书之后有什么作用!(下篇)丨IDCF

拿到证书有什么用? 提高职业竞争力:通过学习认证培训课程可以提升专业技能,了解项目或产品研发全生命周期的核心原则,掌握端到端的研发效能提升方法与实践,包括组织与协作、产品设计与运营、开发与交付、测试与安全、…

信创办公–基于WPS的EXCEL最佳实践系列 (条件格式)

信创办公–基于WPS的EXCEL最佳实践系列 (设置条件格式) 目录 应用背景操作步骤1、选用条件格式1.1 筛选出迟到次数超过3次的数据1.2 筛选出早退次数位于前三的数据1.3 个人加班时长在总体中所占的在的位置 2、删除条件格式2.1 清除规则2.2 管理规则 应用…

铭控传感亮相2023国际物联网展,聚焦“多场景物联感知方案”应用

金秋九月,聚焦IoT基石技术,荟萃最全物联感知企业,齐聚IOTE 2023第20届国际物联网展深圳站。铭控传感携智慧楼宇,数字工厂,智慧消防,智慧泵房等多场景物联感知方案及多品类无线传感器闪亮登场,现…

Docker 基础

一、快速入门: 1.Docker的安装 安装docker引擎 官方网址:Install Docker Engine on CentOS | Docker Docs 朋友们,有坑,千万不要用官方的仓库,就是下面这一步 记得用国内的镜像源: yum-config-manager …

C# 替换字符串最后一个逗号为分号

使用场景,sql语句的insert into table(c1,c2,c3) values (v1,v2,v3),(v1,v2,v3),(v1,v2,v3), 为了提高执行效率,在一个insert into中执行时,在循环中拼接语句,最后一个逗号需要替换为分号才能执行。 public static string Replace…

干洗店软件,洗鞋店收银管理系统小程序app

闪站侠洗衣洗鞋店管理系统是一款专业的洗护管理软件,它集收银系统,会员卡管理系统,财务报表系统等强大功能为一身,系统界面简洁优美,操作直观简单。系统为广大干洗店,洗衣店提供了成本分析,利润分析&#x…

浅谈智能安全配电装置在老年人建筑中的应用

摘要:我国每年因触电伤亡人数非常多,大多数事故是发生在用电设备和配电装置。在电气事故中,无法预料和不可抗拒的事故是比较少的,大量用电事故可采取切实可行措施来预防。本文通过结合老年人建筑的特点和智能安全配电装置的功能&a…

【方法】如何取消ZIP压缩包的密码?

我们知道,在压缩ZIP文件的时候,可以设置“打开密码”来保护压缩包,那后续不需要保护了,不想每次打开压缩包都输一次密码,要如何取消密码呢? 比较常用的方法是先把ZIP压缩包解压后,再压缩成没有…

微服务技术栈-Ribbon负载均衡和Nacos注册中心

文章目录 前言一、Ribbon负载均衡1.LoadBalancerInterceptor(负载均衡拦截器)2.负载均衡策略IRule 二、Nacos注册中心1.Nacos简介2.搭建Nacos注册中心3.服务分级存储模型4.环境隔离5.Nacos与Eureka的区别 总结 前言 在上面那个文章中介绍了微服务架构的…

除静电离子风嘴的工作原理及应用

除静电离子风嘴是一种常见的除静电设备,它的工作原理是通过产生大量的负离子来中和物体表面的静电电荷,从而达到除静电的目的。 除静电离子风嘴内部装有一个电离器,电离器会将空气中的氧气分子或水分子电离成正、负离子。这些带电的离子在空…

2023年地理信息系统与遥感专业就业前景与升学高校排名选择

活动地址:毕业季进击的技术er 地理信息系统(GIS,Geographic Information System),又称“地理信息科学”(Geographic Information Science),是一种具有信息系统空间专业形式的数据管理…