详谈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.hqwc.cn/news/126861.html

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

相关文章

【刷题笔记10.6】LeetCode:汉明距离

LeetCode:汉明距离 一、题目描述 两个整数之间的汉明距离是指这两个数字对应二进制位不同的位置的数目。 给你两个整数x 和 y,计算并返回他们之间的汉明距离。 二、分析及代码实现 对于汉明距离问题我们其实可以将其转换为:计算x 和 y按…

php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动

直接上代码 示例 <?php/*** php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动* * param array $lists 一维数组&#xff0c;包括不同级别的各行数据* param int $parentId 目标节点的父类ID (可以是顶级分类的父ID&#xff0c;也可以是任意节点的父ID)* …

基于Dockerfile搭建LNMP

目录 一、基础环境准备 1、环境前期准备 二、部署nginx&#xff08;容器IP 为 172.18.0.10&#xff09; 1、配置Dockerfile文件 2、配置nginx.conf文件 3、构建镜像、启动镜像 三、部署mysql 1、配置Dockerfile文件 2、配置my.conf文件 3、构建镜像、启动镜像 5、验…

设备上架与调试步骤项目篇

1.设备又哪些常见的调试方法&#xff1f; 2.设备开箱 -> 使用的步骤是什么&#xff1f; 3.开局新设备都要设置哪些功能&#xff1f; -- 工程师&#xff1a;架构设计 项目实施 故障排查 -- 调试设备&#xff1a; -- 1.WEB界面 - 界面调试 - 内容比较少的 主要项目 …

Docker 安装 MongoDB

一、什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 二、MongoDB的安装 这里使用docker来安装MongoD 1.docker 拉取mysql镜像 docker pu…

微信小程序开发——自定义堆叠图

先看效果图 点击第一张图片实现折叠&#xff0c;再次点击实现展开 思路 图片容器绑定点击事件获取当前图片索引&#xff0c;触发onTap函数&#xff0c;根据索引判断当前点击的图片是否为第一张&#xff0c;并根据当前的折叠状态来更新每张图片的位置&#xff0c;注意图片向上…

vue模版语法-{{}}/v-text/v-html/v-once

一、{{}}双括号&#xff1a;用于文本渲染 1、 {{变量名}}:data中返回对象的变量名 2、{{js表达式}}:可以直接进行js表达式处理 3、注意&#xff1a;双大括号中不要写等式书写 二、v-text 指令&#xff0c;用于文本渲染 1、为了解决双大括号渲染数据出现闪烁问题 三、v-cloak …

Dubbo3应用开发—Dubbo3注册中心(zookeeper、nacos、consul)的使用

Dubbo3注册中心的使用 zookeeper注册中心的使用 依赖引入 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><version>${dubbo.version}</version><type>p…

初识链表(7.25)

前面我们学习了顺序表&#xff0c;但顺序表其实存在一些问题 1. 中间/头部的插入删除&#xff0c;时间复杂度为O(N) 2. 增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗&#xff08;尤其是异地扩容&#xff09;。 3. 增容一般是呈2倍的增长&am…

项目_数据可视化| 折线图.散点图.随机漫步

安装matplotlib 在正式开始编写程序之前&#xff0c;需要先安装pip、matplotlib模块&#xff0c;苹果系统的安装问题在之前的文章中有相关介绍内容&#xff0c;如果pycharm运行模块报错&#xff0c;可以再次检查是否版本兼容问题。 绘制折线图 调用subplot&#xff08;&#x…

系统03:15min导图复习 文件管理

&#x1f433;前言 图源&#xff1a;文心一格 考研笔记整理&#xff0c;纯复习向&#xff0c;思维导图基本就是全部内容了&#xff0c;不会涉及较深的知识点~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画思维导图~&#x1f9e9;&#x1f9e9; 编辑&#xff1a; …

unity操作_Camera c#

观察场景中Main Camera 的清除背景Clear Flags 第一种&#xff1a;Skybox天空盒渲染 制作3D游戏使用 第二种&#xff1a;Solid Color 制作2D游戏 第三种&#xff1a;Depth only 多个摄像机叠加渲染 相对重点学会多个摄像机设置Depth only使…