spring中循环依赖问题、Servlet 的过滤器与 Spring 拦截器区别

spring中的循环依赖问题

当A类中关联B,B类中关联A

class A {
     B b;
}
class B {
    A a;
}

正常java代码中new A时,b为null;new B时,a为null;

但是在spring中,由于对象是由spring容器管理的,当创建A 的bean对象时,B的bean还没有创建,无法将B注入到A中,同理,当创建B的bean对象时,A的bean 对象也没有创建,无法将A出入到B中,两者都不能完成创建,造成了循环依赖问题。

 

解决方式: 

首先spring中有三级缓存:

1.一级缓存(singletonObjects):创建的bean对象;用于保存实例化、注入、初始化完成的bean实例。

2.二级缓存(earlySingletonObjects):半成品的bean对象;用于保存实例化完成的bean实力,提前暴露对象。

3.三级缓存(singletonFactories):创建bean对象的工厂。

循环依赖创建过程:

1.创建并初始化A

2.发现B未创建bean对象,将A的半成品bean对象存到二级缓存中,工厂放入三级缓存中。

3.创建B并初始化的bean对象,在二级缓存中拿A的半成品注入。

4.bean B初始化完成,放到一级缓存。

5.完成A的bean对象创建,将B的bean对象注入到A中。

Servlet 的过滤器与 Spring 拦截器区别 

 

 Filter过滤器在请求进入容器后,在进入Servlet之前进行预处理,需要服务器控制。

Intercept拦截器是在请求进入Servlet后,在进入Controller之前进行预处理,Controller中渲染了对应的视图之后的请求结果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言——联合和枚举

目录 一、联合体 1.1 联合体类型的声明 1.2 联合体的特点 1.3 相同成员的结构体和联合体对比 1.4 联合体大小的计算 1.5 联合的⼀个练习 二、枚举类型 2.1 枚举类型的声明 2.2 枚举类型的优点 2.3 枚举类型的使用 一、联合体 1.1 联合体类型的声明 像结构体⼀样…

【腾讯云服务器】幻兽帕鲁私服服务器部署保姆级教程

在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活,也可以为你在工厂工作。你也可以将它们进行售卖,或分解后食用。 想要部署属于自…

C++ STL之stack的使用及模拟实现

文章目录 1. 介绍2. stack的使用3. 栈的模拟实现 1. 介绍 英文解释: 也就是说: stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 stack是作为容器适配器被实现…

8 种网络协议

什么是网络协议? 网络协议就是计算机之间沟通的语言,为了有效地交流,计算机之间需要一种共同的规则或协议,就像我们和老外沟通之前,要先商量好用哪种语言,要么大家都说中文,要么大家都说英语&a…

Elasticsearch分布式一致性原理剖析(三)-Data篇

本文首发于云栖社区(Elasticsearch分布式一致性原理剖析(三)-Data篇-博客-云栖社区-阿里云),由原作者转载。 前言 “Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式、原理以及其存在的问…

安卓移动设备使用DS file文件管理工具远程访问本地群晖NAS文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接6. 结语 DS file 是一个由群晖公司开发的文件管理应用程序,主要用于浏览、访问和管理存储在群晖NAS(网络附加存储)中的文件。这个应用…

ubuntu下使用Live555搭建流媒体服务器

本教程实验环境在64bit ubuntu Live555基本介绍,RTSP,以及服务端客户端的编程参考这篇文章:实时流媒体传输开源库——Live555 拉取Live555源码到本地文件夹 wget http://www.live555.com/liveMedia/public/live.2023.11.30.tar.gz解压缩 …

NIC400简介

1. 简介 CoreLink NIC-400(Network Inter Connect)网络互连是高度可配置的,能够创建一个完整的高性能、优化和符合AMBA标准的网络基础设施。CoreLink NIC-400网络互连有许多可能的配置。它们的范围从单一的桥接组件,例如AHB到AXI协…

【MIdjourney】五个特殊物体关键词

1.碳酸(Carbonate) 这一词语的本意是指包含碳(C)、氧(O)和氢(H)元素的化合物。而在MIdjourney中添加该词汇会使得生成的图片具有水滴效果且富有动态感。 2.灯丝(Filament) Filament效果可能包括更逼真的…

Dify学习笔记-手册(三)

1、应用构建及提示词 在 Dify 中,一个“应用”是指基于 GPT 等大型语言模型构建的实际场景应用。通过创建应用,您可以将智能 AI 技术应用于特定的需求。它既包含了开发 AI 应用的工程范式,也包含了具体的交付物。 简而言之,一个应…

【C++】命名空间详解

目录 前言 命名空间的定义 命名空间的使用 前言 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以…

225.用队列实现栈(附带源码)

目录 一、思路 二、源码 一、思路 所以,创建两个队列 入栈,那个不空入那个 出栈,移动不空的队列的前n-1个到空队列,出队列第n个 很简单 总的来说,就是 下面直接手撕代码: 二、源码 typedef int QDa…

【MySQL】计算日期是当前月份的第几周

力扣题 1、题目地址 2993. 发生在周五的交易 I 2、模拟表 表:Purchases Column NameTypeuser_idintpurchase_datedateamount_spendint (user_id, purchase_date, amount_spend) 是该表的主键(具有唯一值的列)。purchase_date 的范围从 2023 年 11 月 1 日到 2…

嵌入式学习-C++-Day1

思维导图 作业 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 代码如下&#xff1a; #include <iostream>using namespace std;int main() {string str1;cout << "请输入一…

win 下使用 cmd 运行 jar 包

1、使用 Win R 输入 cmd 命令打开命令提示符 2、在 cmd 窗口中输入以下命令 java -jar xxxxxx.jar 运行 jar 包&#xff0c;控制台出现中文乱码 原因是 windows 默认使用 GBK 编码格式&#xff0c;程序使用 UTF-8 编码格式 将编码格式改为 UTF-8 编码&#xff0c;在 cmd 窗…

【算法基础】循环相克令(猜拳游戏)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有…

【转载】linux摄像头驱动

Linux摄像头驱动学习第一篇&#xff0c;对虚拟视频驱动Virtual Video Driver(vivid)进行测试、分析、编写。 V4L2(Video for Linux two)是Linux内核中关于视频设备的内核驱动框架&#xff0c;为上层的访问底层的视频设备提供了统一的接口。 V4L2可以支持多种设备,它可以有以下…

【C++】入门(二)

前言&#xff1a; c基础语法&#xff08;下&#xff09; 文章目录 五、引用5.1 引用概念5.2 引用使用规则5.3 常引用5.4 引用的使用场景5.5 引用和指针的区别 六、内联函数6.1 概念6.2 内联函数的特性 七、auto关键字&#xff08;C11&#xff09;7.1 概念7.2 使用规则7.3 用于f…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术&#xff0c;用于识别文本中每个词的词性&#xff0c;例如名词、动词、形容词等&#xff1b; 词性标注也被称为语法标注或词类消疑&#xff0c;是语料库语言学中将语料库内单词…

【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔

项目文件&#xff1b; 【1】 预览 文件 文件01 名称 pom.xml&#xff1b; 内容 &#xff08;01&#xff09;总的 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http:…