循环注入

删除没有用到的注入,注意脏代码引起的循环注入问题。

bean在初始化的同时会初始化相应的属性(byName),a在初始化的时候会创建a.b,a.b在初始化的时候会创建a.b.a,形成了一个环,所以在AbstractBeanFactory.doGetBean(这里会出现递归调用) 时候 ,走到:

if (isPrototypeCurrentlyInCreation(beanName)) {

throw new BeanCurrentlyInCreationException(beanName);

}

会抛出一个异常:Requested bean is currently in creation: Is there an unresolvable circular reference,然后scope是singlton或者其他的时候bean的创建过程不一样,不会有一个这样子的判断,因而不会抛出这样子的错误。

因为scope=prototype,所以每次请求对应不同的bean,所以在创建的时候有一个依赖的先后顺序,而如果bean配置成singleton,则属性间初始化的顺序可以无所谓了,所有的bean都只有一份,所以在bean是singleton时候不会报unresolvable circular reference的错误。

来自为知笔记(Wiz)

时间: 2024-10-13 04:55:58

循环注入的相关文章

@lazy注解处理循环注入问题

@Service public class A extends GenericBaseService { @Autowired private B b; } @Service public class B extends GenericBaseService { @Autowired private A a; } //如上代码所描述,启动时可能会报循环依赖的错误(并非一定会报错),如果报错的话,就是spring不知道应该先加载哪个类先了,好比,有蛋才有鸡和有鸡才有蛋的问题,解决方案是,如果先有蛋

当shiro做成动态URL管理时出现循环注入BeanCurrentlyInCreationException的问题解决方法

<!-- Shiro的Web过滤器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> </bean> <bean class="

拥抱.NET Core系列:依赖注入(1)

依赖注入时编程手段中解耦和封装的一个非常重要的手段,我本人已经到了没有DI无法编写项目的程度了,在.NET Framework中微软并没有在FCL中引入DI,虽然推出了"Unity".而在.NET Core中DI几乎是所有组件的标配可见DI有多么的重要,本节主要简单介绍下微软在.NET Core中加入的DI组件. 前言 DIP.IoC.DI 说起DI不得不提IoC这个模式,很多人会把DI和IoC混为一谈,但其实这两者是概念和实现的关系. 依赖倒置原则(DIP):软件设计原则,要依赖于抽

Angular 2.0--1

Angular 2.0 从0到1 (五) 第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节:Angular 2.0 从0到1 (五)第六节:Angular 2.0 从0到1 (六)第七节:Angular 2.0 从0到1 (七)第八节:Angular 2.0 从0到1 (八)番外:Angular 2.0 从0到1 Rx-隐藏在Angular 2.x

Java开发岗位面试题

看到一些java面试题,准备慢慢自己做出来试试. 一.Java基础 1. String类为什么是final的. 只有当字符串是不可变的,字符串池才有可能实现.字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串.但如果字符串是可变的,那么String interning将不能实现(注:String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串.),因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变

java工程师面试总结

一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪些,有什么区别. 6. 反射中,Class.forName和classloader的区别 7. Java7.Java8的新特性(baidu问的,好BT) 8. Java数组和链表两种结构的操作效率,在

2015年Java开发岗位面试题归类

一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪些,有什么区别. 6. 反射中,Class.forName和classloader的区别 7. Java7.Java8的新特性(baidu问的,好BT) 8. Java数组和链表两种结构的操作效率,在

2016java技术岗面试题

一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪些,有什么区别. 6. 反射中,Class.forName和classloader的区别 7. Java7.Java8的新特性(baidu问的,好BT) 8. Java数组和链表两种结构的操作效率,在

硬件设计与开发——热水循环泵系统

电阻的分压功能,二极管的钳位功能,电容的充放电特性,电阻.电容和稳压管组成的延时电路,N三极和P三极管在电源电路中的开关应用,复合管的应用 一.项目背景介绍 项目用在彩扩机中,要求对两个槽缸循环注入热水,相隔时间为5分钟,同时对彩扩机中加热系统要有散热功能,当加热系统温度过高散热系统功能并且红LED灯点亮作为警告,当温度降到正常范围,散热系统不工作并且绿LED灯点亮表示彩扩机正常工作. 二.项目资源评估 需要的条件: 1.有刷直流马达电压12V负载功率0.6W 2.电源系统由机器提供: 15VD