spring bean的循环引用-程序员宅基地

技术标签: java  

看过一次spring公开课,记录一下bean的循环引用问题。

问题:

public class IndexService{

  @Autowired

  IndexDao indexDao;

}

public class IndexDao{

  @Autowired

  IndexService indexService;

}

以上的实例中IndexService依赖IndexDao,IndexDao中依赖IndexService。

spring在bean的实例化过程:

  先去创建IndexDao bean,

1.创建IndexDao实例,此时还没有IndexDao bean产生。

2.去配置IndexDao对象的属性,这个属性就是IndexService,在这个配置的过程中会先把自己(IndexDao)对象放到singleFactory中;

3.然后去查找IndexService bean去填充,发现单例池(专门存放bean)中没有,然后去singleFactory中去找,还是没有。

4.创建IndexService实例,此时还没有IndexService bean。

5.去配置IndexService对象的属性,这个属性就是IndexDao,在这个配置的过程中会先把自己(IndexDao)对象放到singleFactory中;

6.然后去查找IndexDao bean去填充,发现单例池中没有,然后去singleFactory中去找,发现有了。

7.然后把属性填充到IndexService中。

8.经过4,5,6,7后已经有了IndexService,并且此时属性IndexDao有值了,然后通过步骤3再将这个IndexService注入到IndexDao

9.然后继续完成IndexDao 后续的bean的初始化。

转载于:https://www.cnblogs.com/yongan/p/11354705.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LYP37106231/article/details/101977173

智能推荐

Jenkins入门(一)_jenkins_listen_address-程序员宅基地

文章浏览阅读650次。25.1 CI/CD介绍互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署正如你在上图中看到,[持续集成(Continuous Integration)]、[持续交付(Continuous Delivery)]和[持续部署(Continuous ..._jenkins_listen_address

[运算放大器]佛朗哥笔记 - 信号发生器 - 三角波发生器_三角波发生电路公式-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏19次。三角波发生器 由图易知箍位二极管的压降为±Vclamp=±(VzD1+2VD),从滞回比较器折算可得±VT=±(R2/R1)Vclamp。由于对称性,输出电压由-VT上升到+VT的时间为半个周期,利用恒流注入公式,代入参数I= Vclamp/R,ΔV=2VT= 2(R2/R1)Vclamp。可得 斜率控制 高电平时,注入电流为IH=[ Vclamp-VD(on)]/(R6+R3);低电平时,注..._三角波发生电路公式

linux下查看系统配置参数_linux查看配置参数-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏5次。linux下查询系统的配置信息_linux查看配置参数

深度强化学习系列(1): 深度强化学习概述_用一张图描述强化学习方法-程序员宅基地

文章浏览阅读2.4w次,点赞20次,收藏233次。深度强化学习及其在自动驾驶中的应用( DRL & ADS )专栏系列文章规划DRL&ADS系列之(1): 强化学习概述DRL&ADS系列之(2): 深度强化学习及算法讲解DRL&ADS系列之(3): ADS软硬件分析及DRL在Torcs中的应用 概述机器学习是人工智能的一个分支,在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学..._用一张图描述强化学习方法

随堂笔记:C语言相关小知识_/wenhua123原创-程序员宅基地

文章浏览阅读234次。//局部变量的生命周期只存在当前的作用域中,离开作用域之后内存释放int main(int argc,const char * argv[]) { int a=10; { int a=11; printf("a=%d\n",a); //局部变量 离开括号后 内存释放 } pri_/wenhua123原创

贝塞尔曲线基础使用_贝塞尔曲线用法-程序员宅基地

文章浏览阅读7.5k次,点赞2次,收藏13次。前言贝塞尔曲线于1962由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。现在贝塞尔曲线在计算机图形学领域也是一个相当重要的参数曲线,很多画图工具软件都包含贝塞尔曲线的工具对象。Android开发过程中也可以通过它实现很多有趣的特效动画,这里通过简单的代码编写来深入学习贝塞尔曲线的生成。曲线生成一阶贝塞尔曲线给定点两..._贝塞尔曲线用法

随便推点

petalinux-build: do_compile: oe_runmake failed & do_compile: Function failed: do_compile 解决方法-程序员宅基地

文章浏览阅读6.6k次,点赞6次,收藏9次。petalinux-build 报错 do_compile: oe_runmake failedpetalinux版本:2018.3kernel和uboot都是使用外部导入的源码;petalinux-build编译报错信息如下:$ petalinux-build [INFO] building project[INFO] sourcing bitbakeINFO: bitbake petalinux-user-imageLoading cache: 100% |###############_oe_runmake failed

DevOps的常见误区_devops不适合哪一类型的企业-程序员宅基地

文章浏览阅读271次。在DevOps推广过程中有非常多的声音,有人说 DevOps 只适合特定的公司、特定的企业、特定的文化,他们的公司很难去推广 DevOps 活动。所以在《DevOps Handbook》中专门有一个章节来谈一谈常见的 DevOps 误区,今天和大家一起分享解读下。_devops不适合哪一类型的企业

r语言进行go富集分析_生信实操|如何利用R语言进行GSEA分析-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏47次。看图说话栏目曾介绍过GSEA的原理(看图说话|GSEA分析--教你解锁高级的富集分析),今天我们来看一下如何利用R语言进行GSEA分析。如果你有RNA-seq的数据,就可以这样做,先把数据整成这样,一共两列,一列是SYMBOL,一列是foldChange。然后输入代码:>setwd("E:\\20201214GSEA分析怎么做")>#if(!requireNamesp..._r语言gsea

java基础部分_zerace-程序员宅基地

文章浏览阅读154次。1.Java可以理解为编程语言或者开发工具,为了让平台对编程人员透明,写出可以在不同平台运行的相同源代码,Java 开发出了 JVM 即 Java 虚拟机,从而做多一次编译,到处运行。2.以下是java的运行原理示意图即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟..._zerace

C/C++动态加载So编程_c++ 加载so-程序员宅基地

文章浏览阅读7.7k次,点赞6次,收藏22次。dladdr、dlclose、dlerror、dlopen、dlsym等动态链接加载器的编程接口和示例。_c++ 加载so

C语言:求(1-1/3+1/5-1/7+1/9-1/11…)*4 的值(while循环)_1-1/3+1/5-1/7+1/9-1/11 c语言-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏27次。问题:编写一个程序实现此功能:计算 (1-1/3+1/5-1/7+1/9-1/11…)*4 的值相关知识:while循环代码实现:# include <stdio.h>int main(void){ int i = 1; int j = 1; double sum = 0; //结果肯定是小数, 所以要定义成double或float型 while (1.0/i > 1e-6) /*当1/i小于10的-6次方时停止循环。这个循环条件是自己_1-1/3+1/5-1/7+1/9-1/11 c语言

推荐文章

热门文章

相关标签