简单了解Spring beanfactory循环依赖命名重复属性
是否允许循环依赖和bean的命名重复取决于beanfactory的两大属性
allowBeanDefinitionOverriding和allowCircularReferences。这两个属性未指定时取的是DefaultListableBeanFactory中的默认值,均为true,即默认允许同名bean和循环引用(只有单例允许)。
但是假如读者用的springboot版本比较新,就会发现情况并不是这样,同名bean会冲突报错。为什么呢,跟踪源码发现是Springboot应用在2.1.8版本的时候给bean名冲突设定了默认值为false。
在SpringApplication类中
总结:spring旧版本默认允许循环依赖(单例)和bean名覆盖,但是在springboot 2.1.8版本之后不允许bean名覆盖(可以提前发现问题),允许循环依赖(单例)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
spring如何使用命名空间p简化bean的配置
这篇文章主要介绍了spring如何使用命名空间p简化bean的配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一般情况下,我们是这么配置bean的: <bean id="car1" class="com.gong.spring.beans.Car"> <property name="name" value="baoma"></property
-
Spring中Bean的命名方式代码详解
本文主要描述的是关于spring中bean的命名方式,通过简单实例向大家介绍了六种方式,具体如下. 一般情况下,在配置一个Bean时需要为其指定一个id属性作为bean的名称.id在IoC容器中必须是唯一的,此外id的命名需要满足xml对id的命名规范. 在实际情况中,id命名约束并不会给我们带来影响.但是如果用户确实希望用到一些特殊字符来对bean进行命名,那么可以使用bean的name属性来进行命名,name属性没有字符上的限制,几乎可以使用任何字符. 每个Bean可以有一个或多个id,我们
-
详解关于spring bean名称命名的那些事
目录 前言 02源码查看 01从main方法直接调试断点 02带着问题查看,靠猜加验证的方式 03源码验证 04总结 前言 用了多年spring,一直想当然把spring默认的beanName当成是类名的首字母小写,比如HelloService其beanName为helloService.直到有天对接了供方厂商的接口,他有个类形如ABService,于是用 getBean("aBService") 的方式获取bean,结果取到是null,一开始以为是ABservice没注入,后面采用
-
简单了解Spring beanfactory循环依赖命名重复属性
是否允许循环依赖和bean的命名重复取决于beanfactory的两大属性 allowBeanDefinitionOverriding和allowCircularReferences.这两个属性未指定时取的是DefaultListableBeanFactory中的默认值,均为true,即默认允许同名bean和循环引用(只有单例允许). 但是假如读者用的springboot版本比较新,就会发现情况并不是这样,同名bean会冲突报错.为什么呢,跟踪源码发现是Springboot应用在2.1.8版本的
-
简单了解Spring beanfactory循环依赖命名重复2大属性
是否允许循环依赖和bean的命名重复取决于beanfactory的两大属性 allowBeanDefinitionOverriding和allowCircularReferences.这两个属性未指定时取的是DefaultListableBeanFactory中的默认值,均为true,即默认允许同名bean和循环引用(只有单例允许). 但是假如读者用的springboot版本比较新,就会发现情况并不是这样,同名bean会冲突报错.为什么呢,跟踪源码发现是Springboot应用在2.1.8版本的
-
spring解决循环依赖的简单方法
Spring内部如何解决循环依赖,一定是单默认的单例Bean中,属性互相引用的场景.比如几个Bean之间的互相引用: 或者 setter方式原型,prototype 原型(Prototype)的场景是不支持循环依赖的,因为"prototype"作用域的Bean,为每一个bean请求提供一个实例,Spring容器不进行缓存,因此无法提前暴露一个创建中的Bean,会抛出异常. 构造器参数循环依赖 Spring容器会将每一个正在创建的Bean 标识符放在一个"当前创建Bean池&q
-
Spring中循环依赖的解决方法详析
前言 说起Spring中循环依赖的解决办法,相信很多园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚.本文就试着尽自己所能,对此做出一个较详细的解读.另,需注意一点,下文中会出现类的实例化跟类的初始化两个短语,为怕园友迷惑,事先声明一下,本文的实例化是指刚执行完构造器将一个对象new出来,但还未填充属性值的状态,而初始化是指完成了属性的依赖注入. 一.先说说Spring解决的循环依赖是什么 Java中的循环依赖分两种,一种是构造器的循环依赖,另一种是属性的循环依赖.
-
spring解决循环依赖
概述 循环依赖就是依赖关系形成环,比如最简单的循环依赖:A对象依赖B,B对象依赖A 属性注入与循环依赖 如果是构造器注入,如果循环依赖对象没法构建,因为还未实例化 如果是属性注入但是作用域是prototype,spring不会缓存其对象实例,也不能处理循环依赖的情况 如果是属性注入singleton的,其bean的实例化过程与属性注入过程是分开的,并且spring提供了三个map(就是大家说三级缓存)来实现. spring属性注入处理循环依赖的方式 通过以下xml方式配置一个循环依赖的示例: <
-
Spring解决循环依赖问题及三级缓存的作用
目录 前言 1什么是循环依赖 2 如何解决循环依赖 3无法解决的循环依赖 前言 所谓的三级缓存只是三个可以当作是全局变量的Map,Spring的源码中大量使用了这种先将数据放入容器中等使用结束再销毁的代码风格 Spring的初始化过程大致有四步: 创建beanFactory,加载配置文件 解析配置文件转化beanDefination,获取到bean的所有属性.依赖及初始化用到的各类处理器等 刷新beanFactory容器,初始化所有单例bean 注册所有的单例bean并返回可用的容器 我们说的循
-
浅谈Spring 解决循环依赖必须要三级缓存吗
我们都知道 Spring 是通过三级缓存来解决循环依赖的,但是解决循环依赖真的需要使用到三级缓冲吗?只使用两级缓存是否可以呢?本篇文章就 Spring 是如何使用三级缓存解决循环依赖作为引子,验证两级缓存是否可以解决循环依赖. 循环依赖 既然要解决循环依赖,那么就要知道循环依赖是什么.如下图所示: 通过上图,我们可以看出: A 依赖于 B B 依赖于 C C 依赖于 A public class A { private B b; } public class B { private C c; }
-
Spring解决循环依赖的方法(三级缓存)
说起Spring,作为流水线上装配工的小码农,可能是我们最熟悉不过的一种技术框架.但是对于Spring到底是个什么东西,我猜作为大多数的你可能跟我一样,只知道IOC.DI,却并不明白这其中的原理究竟是怎样的.在这儿你可能想得完整的关于Spring相关的知识,但是我要告诉你对不起.这里不是教程,只能作为你窥探spring核心的窗口.我不做教程,因为网上的教程.源码解析太多,你可以自行选择学习.但我要提醒你的是,看再多的教程也不如你一次的主动去追踪源码. 好了,废话说了这么多就是提醒你这里不是一个教
-
Spring源码剖析之Spring处理循环依赖的问题
前言 你是不是被这个骚气的标题吸引进来的,_ 喜欢我的文章的话就给个好评吧,你的肯定是我坚持写作最大的动力,来吧兄弟们,给我一点动力 Spring如何处理循环依赖?这是最近较为频繁被问到的一个面试题,在前面Bean实例化流程中,对属性注入一文多多少少对循环依赖有过介绍,这篇文章详细讲一下Spring中的循环依赖的处理方案. 什么是循环依赖 依赖指的是Bean与Bean之间的依赖关系,循环依赖指的是两个或者多个Bean相互依赖,如: 构造器循环依赖 代码示例: public class BeanA
-
Java中的Spring 如何处理循环依赖
目录 前言 什么是循环依赖 构造器循环依赖 Setter循环依赖 构造器循环依赖处理 那么Spring到底是如何做的呢? DefaultSingletonBeanRegistry#getSingleton AbstractAutowireCapableBeanFactory#autowireConstructor setter循环依赖处理 AbstractAutowireCapableBeanFactory#doCreateBean prototype模式的循环依赖 总结 前言 Spring如何
随机推荐
- 获取字符串数组的最后一段字符
- 如何用数据库制作一个多用户版的计数器?
- 【最新漏洞】IE中使用Rds.DataSpace下载并运行病毒文件
- Raid教程 全程图解手把手教你做RAID
- Apache 文件上传与文件下载案例详解
- Java设计模式之代理模式_动力节点Java学院整理
- iOS如何实现强制转屏、强制横屏和强制竖屏的实例代码
- .NET的DateTime函数获取上个月的起始和截止时间的方法
- Express + Node.js实现登录拦截器的实例代码
- asp下去除数组中重复项的方法
- jquery插件jTimer(jquery定时器)使用方法
- 删除QQ好友遇到连接超时提示的解决
- 浅谈自定义注解在Spring中的应用
- 基于vue-ssr服务端渲染入门详解
- springboot自动重启的简单方法
- Android TabHost选项卡标签图标始终不出现的解决方法
- django将网络中的图片,保存成model中的ImageField的实例
- python+jinja2实现接口数据批量生成工具
- java实现对map的字典序排序操作示例
- CentOS 7下安装与配置MySQL 5.7