返回顶部
首页 > 资讯 > 后端开发 > Python >springboot相互依赖server相互引用方式
  • 383
分享到

springboot相互依赖server相互引用方式

2024-04-02 19:04:59 383人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录SpringBoot相互依赖server相互引用spring解决相互依赖的问题构造器循环依赖setter循环依赖field属性注入循环依赖(prototype)小结一下sprin

springboot相互依赖 server相互引用

public class RoleService{
	@Autowired @Lazy
	private UserServer userServer;
}
public class UserService{
	@Autowired @Lazy
	private RoleService roleService;
}

spring解决相互依赖的问题

构造器循环依赖

@Service
public class A {      
public A(B b) {  }
 }
@Service
public class B {
      public C (C c) {  }
} 
@Service
public class C {
      public A (A a) {  }
}

通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛出BeanCurrentlyInCreationException异常表示循环依赖

描述:创建A类是,构造器需要B类,那将去创建B,在创建B时又发现需要A类,则又去创建C类,最终在创建C时发现又需要A,从而形成一个环,没办法创建。

原理:Spring容器将每一个正在创建的bean标识符放在一个“当前创建bean池”中,bean标识符创建过程中将一直保持在这个池中,因为如果在创建bean过程中发现自己已经在“当前创建bean池”中时,将会抛出BeanCurrentlyInCreationException异常表示循环依赖;而对于创建完毕的bean将从“当前创建bean池”中清除掉。

setter循环依赖

@Service
public class A1 {      
@Autowired      
private B1 b1; } 
@Service
public class B1 {      
@Autowired      
public C1 c1;
} 
@Service
public class C1 {      
@Autowired 
public A1 a1;
 }

通过setter注入方式构成的循环依赖。

原理:对于setter注入造成的依赖是通过Spring容器提前暴露刚完成构造器注入但未完成其他步骤(比如setter注入)的bean来完成的,而且只能解决单例作用域的bean循环依赖。

field属性注入循环依赖(prototype)

@Service @Scope("prototype") public class A1 {       
@Autowired       
private B1 b1; }  
@Service @Scope("prototype") 
public class B1 {       
@Autowired       
public C1 c1; }  
@Service @Scope("prototype") public class C1 {      
 @Autowired  
public A1 a1; }

报错

小结一下

Spring只能解决Setter方法注入的单例bean之间的循环依赖

ClassA依赖ClassB,ClassB又依赖ClassA,形成依赖闭环。Spring在获取ClassA的实例时,不等ClassA完成创建就将其曝光加入正在创建的bean缓存中。在解析ClassA的属性时,又发现依赖于ClassB,再次去获取

ClassB,当解析ClassB的属性时,又发现需要ClassA的属性,但此时的ClassA已经被提前曝光加入了正在创建的bean的缓存中,则无需创建新的的ClassA的实例,直接从缓存中获取即可。从而解决循环依赖问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springboot相互依赖server相互引用方式

本文链接: https://lsjlt.com/news/140595.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springboot相互依赖server相互引用方式
    目录springboot相互依赖server相互引用spring解决相互依赖的问题构造器循环依赖setter循环依赖field属性注入循环依赖(prototype)小结一下sprin...
    99+
    2024-04-02
  • 怎么实现springboot相互依赖server相互引用
    小编给大家分享一下怎么实现springboot相互依赖server相互引用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!springboot相互依赖 server...
    99+
    2023-06-29
  • springboot的相互依赖报错问题怎么解决
    本篇内容介绍了“springboot的相互依赖报错问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot相互依赖报错...
    99+
    2023-06-29
  • java调用相互依赖的dll的处理方法
    目录一、问题描述二、处理办法2.1 类定义2.2 调用三、结语一、问题描述 最近在做一个功能时遇到java需要调用dll,并且dll有依赖关系,之前都是单独调用一个,其实调用dll的...
    99+
    2024-04-02
  • springboot项目之相互依赖报错问题(基于idea)
    目录springboot相互依赖报错解决方法springboot项目处理循环依赖问题(circular reference)解决方法springboot相互依赖报错 昨天在辛劳的进行...
    99+
    2024-04-02
  • spring怎么解决相互依赖问题
    在Spring中,可以通过以下几种方式解决相互依赖问题:1. 构造函数注入:使用构造函数将依赖项作为参数传递给类的构造函数,从而实现...
    99+
    2023-08-16
    spring
  • java调用相互依赖的dll的处理方法是什么
    这篇文章将为大家详细讲解有关java调用相互依赖的dll的处理方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、问题描述最近在做一个功能时遇到java需要调用dll,并且dll有依...
    99+
    2023-06-29
  • springboot多个service互相调用的事务处理方式
    目录多个service互相调用的事务处理注解配置如下Spring事务调用Service和Service之间的调用原理解析多个service互相调用的事务处理 今天,想在一个servi...
    99+
    2024-04-02
  • java.lang.String和java.util.NClob互相转换方式
    java.lang.String和java.util.NClob互相转换 //NClob或Clob转String类型 public String clob2Str(NClob n...
    99+
    2024-04-02
  • NDArray与numpy.ndarray互相转换方式
    目录NDArray与numpy.ndarray互相转换NumPy与ndarray简介NumPy简介数组ndarrayNDArray与numpy.ndarray互相转换 import ...
    99+
    2024-04-02
  • ByteArrayOutputStream与InputStream互相转换方式
    目录ByteArrayOutputStream与InputStream互相转换InputStream 转为 ByteArrayOutputStreamByteArrayOutputS...
    99+
    2024-04-02
  • C++string和wstring相互转换方式
    目录%S和%s用法string和wstring转换方法总结在C++项目编程中,由于项目工程被设置为Unicode编码,因此经常遇到std::string类型和std::wstring...
    99+
    2023-02-28
    C++ string C++ wstring string和wstring相互转换
  • Java坐标系相互转换方式
    目录Java坐标系相互转换Java任意两个坐标系转换首先是实体类计算工具类Java坐标系相互转换 1. WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位...
    99+
    2024-04-02
  • 操作系统与桌面环境的舞会:相互依赖的共生
    ...
    99+
    2024-04-02
  • javascript 方法 重名 相互 调用
    在 JavaScript 中,方法之间的命名是很重要的,但有时候我们会遇到方法同名的情况,这种情况会使得我们的代码出现一些问题,甚至有时候会造成混乱和错误。本文将探讨在 JavaScript 中方法重名相互调用的问题,并提供一些解决方案。方...
    99+
    2023-05-21
  • string类和LocalDateTime的相互转换方式
    目录string类和LocalDateTime相互转换1.LocalDateTIme转换2.LocalDate转换string转化LocalDateTime类出现的问题string类...
    99+
    2024-04-02
  • ReactHook父子组件相互调用函数方式
    目录React Hook 父子组件相互调用函数1.子组件调用父组件函数方法2.父组件调用子组件函数方法React Hook 父子组件传值父组件子组件React Hook 父子组件相互...
    99+
    2024-04-02
  • springboot多个service互相调用的事务处理方法
    本文小编为大家详细介绍“springboot多个service互相调用的事务处理方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot多个service互相调用的事务处理方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-29
  • Base64与File之间的相互转化方式
    目录Base64与File的相互转化问题需要注意将Base64转为文件并保存Base64与File的相互转化 问题 最近遇到一个上传文件的问题,前端使用了另一种传值,就是Base64...
    99+
    2024-04-02
  • vue3 父子组件间相互传值方式
    目录vue3父子组件相互传值父向子传值子组件向父组件传值vue3父子组件传值的注意事项解决办法:两种vue3父子组件相互传值 父向子传值 父 <pie-chart :pieDa...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作