广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一文搞懂Spring循环依赖的原理
  • 450
分享到

一文搞懂Spring循环依赖的原理

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

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

摘要

目录简介循环依赖实例测试简介 说明 本文用实例来介绍@Autowired解决循环依赖的原理。@Autowired是通过三级缓存来解决循环依赖的。  除了@Autoired,

简介

说明

本文用实例来介绍@Autowired解决循环依赖的原理。@Autowired是通过三级缓存来解决循环依赖的。 

除了@Autoired,还有其他方案来解决循环依赖的,见:spring循环依赖的解决方案详解

概述

@Autowired进行属性注入可以解决循环依赖。原理是:Spring控制了bean的生命周期,先实例化bean,后注入bean的属性。Spring中记录了正在创建中的bean(已经实例化但还没初始化完毕的bean),所以可以在注入属性时,从记录的bean中取依赖的对象。

相对而言,单纯使用构造器注入就无法解决循环依赖。因为,在构造时就需要传入依赖的对象,导致无法实例化。(注意:构造器注入可以使用@Lazy解决循环依赖,在实例化时,传入代理对象,真正使用时才会生成真正的对象)

循环依赖实例

代码

package com.example.tmp;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
@Component
public class A {
    @Autowired
    private B b;
 
    private String name = "Tony";
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getTest() {
        return b.getAge().toString() + name;
    }
}
package com.example.tmp;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
@Component
public class B {
    @Autowired
    private A a;
 
    private Integer age = 20;
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}
package com.example.controller;
 
import com.example.tmp.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.WEB.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
    @Autowired
    private A a;
 
    @GetMapping("/test1")
    public String test1() {
        return a.getTest();
    }
}

测试

1.启动不报错。

2.postman访问:Http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

到此这篇关于一文搞懂Spring循环依赖的原理的文章就介绍到这了,更多相关Spring循环依赖内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文搞懂Spring循环依赖的原理

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文搞懂Spring循环依赖的原理
    目录简介循环依赖实例测试简介 说明 本文用实例来介绍@Autowired解决循环依赖的原理。@Autowired是通过三级缓存来解决循环依赖的。  除了@Autoired,...
    99+
    2022-11-13
  • Spring循环依赖原理实例分析
    本篇内容介绍了“Spring循环依赖原理实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介概述@Autowired进行属性注入可以解...
    99+
    2023-07-02
  • 一文搞懂PHP中的DI依赖注入
    目录什么是 DI / 依赖注入依赖注入出现的原因简单的依赖注入高阶的依赖注入依赖注入的应用依赖注入高阶优化什么是 DI / 依赖注入 依赖注入DI 其实本质上是指对类的依赖通过构造器...
    99+
    2022-11-13
    PHP DI依赖注入 PHP 依赖注入 PHP DI
  • 一文搞懂 php 中的 DI 依赖注入
    ✨ 目录 🎈 什么是 DI / 依赖注入🎈 依赖注入出现的原因🎈 简单的依赖注入🎈 高阶的依赖注入🎈 ...
    99+
    2023-09-07
    PHP 依赖注入 经验分享 开发模式 高级编程
  • 一文搞懂Node的的事件循环
    本篇文章聊聊Nodejs中的事件循环,希望带大家搞懂Nodejs中的事件循环,从此再也不怕面试官的灵魂发问:谈一下Nodejs的事件循环!想必大家面试的时候,都会被面试官问道:“谈谈Nodejs的事件循环吧”。因为本人也被问道过,但每一次都...
    99+
    2023-05-14
    后端 Node.js
  • Java中的Spring怎么处理循环依赖
    这篇“Java中的Spring怎么处理循环依赖”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中的Spring怎么处理...
    99+
    2023-06-30
  • Java中的Spring 如何处理循环依赖
    目录前言什么是循环依赖构造器循环依赖Setter循环依赖构造器循环依赖处理那么Spring到底是如何做的呢?DefaultSingletonBeanRegistry#getSingl...
    99+
    2022-11-13
  • 一篇文章带你理解Java Spring三级缓存和循环依赖
    目录一、什么是循环依赖?什么是三级缓存二、三级缓存如何解决循环依赖?三、使用二级缓存能不能解决循环依赖?总结一、什么是循环依赖?什么是三级缓存 【什么是循环依赖】什么是循环依赖很好理...
    99+
    2022-11-12
  • 一文搞懂HBase的基本原理
    HBase是一个分布式、可扩展的列式存储数据库,基于Hadoop的HDFS构建。它的基本原理可以概括为以下几点:1. 数据模型:HB...
    99+
    2023-09-23
    HBase
  • 一文带你搞懂Golang依赖注入的设计与实现
    目录依赖注入要解决的问题inject 依赖注入模型/设计injector 的依赖注入实现例子在现代的 web 框架里面,基本都有实现了依赖注入的功能,可以让我们很方便地对应用的依赖进...
    99+
    2023-01-05
    Golang依赖注入实现 Golang依赖注入 Go 依赖注入
  • Java Spring循环依赖原理与bean的生命周期图文案例详解
    前言 Spring是如何处理循环依赖的,又是怎么做到,互相注入对方的proxy bean而不是raw bean的?现在就分析一下 一、循环依赖是什么 Spring中放入两个Servi...
    99+
    2022-11-12
  • Spring源码剖析之Spring处理循环依赖的问题
    前言 你是不是被这个骚气的标题吸引进来的,_ 喜欢我的文章的话就给个好评吧,你的肯定是我坚持写作最大的动力,来吧兄弟们,给我一点动力 Spring如何处理循环依赖?这是最近较为频繁被...
    99+
    2022-11-12
  • 一文带你搞懂JS中六种For循环的使用
    目录一、各个 for 介绍1、for2、for ... in3、for ... of4、for await...of5、forEach6、map二、多个 for 之间区别1、使用场景...
    99+
    2022-11-13
  • 一文搞懂webpack hash持久化的原理
    目录理解 module、chunk 和 bundlehash 的分类hashruntime 和 manifestchunkhashcontentHashwebpack5如何使用 ha...
    99+
    2022-11-13
  • 一文带你搞懂面试率超高的JS事件循环
    目录1. 异步执行原理(1)单线程的JavaScript(2)多线程的浏览器2. 浏览器事件循环(1)执行栈与任务队列(2)宏任务和微任务3. Node.js的事件循环(1)事件循环...
    99+
    2022-11-13
    JS 事件循环
  • 一文搞懂Golang中iota的用法和原理
    目录前言iota的使用iota在const关键字出现时将被重置为0按行计数所有注释行和空行全部忽略跳值占位多个iota一行多个iota首行插队中间插队没有表达式的常量定义复用上一行的...
    99+
    2022-11-11
  • 一文搞懂JavaMD5算法的原理及实现
    目录MD5加密简介MD5加密原理MD5加密常用方法MD5加密简介 哈希算法又称散列算法,是将任何数据转换成固定长度的算法的统称。 从本质上讲,MD5也是一种哈希算法,其输出...
    99+
    2022-11-13
  • 一文搞懂JavaSPI机制的原理与使用
    目录SPI 概念举个栗子第一步第二步第三步第四步原理常用的框架优缺点优点缺点Java 程序员在日常工作中经常会听到 SPI,而且很多框架都使用了 SPI...
    99+
    2022-11-13
  • 一文彻底搞懂Vue的MVVM响应式原理
    目录前言Vue的MVVM原理创建一个html示例在MVue.js中创建MVue入口创建Compile1.处理元素节点compileElement(child)2.处理文本节点comp...
    99+
    2022-11-13
  • 一文搞懂MySQL持久化和回滚的原理
    目录redo log为什么要先更新内存数据,不直接更新磁盘数据?为什么需要redo log?redo log是如何实现的?为什么一个block设计成512字节?为什么要两段式提交?c...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作