博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Requested bean is currently in creation: Is there an unresolvable circular reference?
阅读量:6971 次
发布时间:2019-06-27

本文共 2090 字,大约阅读时间需要 6 分钟。

hot3.png

今天开发写代码,运行代码的时候 出现了 这个错误 : Requested bean is currently in creation: Is there an unresolvable circular reference? 懵逼啊, 什么鬼呢? 百度了一下,说是 循环引用了。 看了一下,还是有点狠难理解。 参考地址: 说什么,单例的不会出现这样的问题的。 看了 一下代码 :

@Service@Scope("prototype")

果然是 注解了 多例,公司框架,之前 只管用,还没有注意到 是加了 多例的, 一般不是 单例的 。 好吧。 可还是一脸的不理解啊: 继续看百度的, 一般都是 说 , a-b-c-a 总之就算 注解的时候 循环 注解了。 构造 bean 的时候 出现 循环了,可 从代码里面怎么看 ? 好吧,有点理解了,可是怎么 知道 是 哪里 出现了问题呢。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hrEffPfmcePlaneecptDomain': 	。。。	Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'toDoStDomain':	。。。Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepositoryImpl':	。。。	Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hrEffUserInfoDomain': 	。。。Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hrEffLeaderDomain': 			Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'hrEffPfmcePlaneecptDomain': Requested bean is currently in creation: Is there an unresolvable circular reference?

上面是我的代码 。抛出来的错误,直接看 错误代码 抛出来的, 这样 引用之间还是 先挺长的 ,总之 就是 : ---'hrEffPfmcePlaneecptDomain.....---toDoStDomain...--hrEffPfmcePlaneecptDomain... 这两个实体 循环引用了。 得解决。 解决办法, 说什么 变 单例啊 , 用set 的 原生方式, 加入 bean 的引用,替换注解 参考地址:

我觉得 最差的解决: 就是 如果 可以 换注解,就 在 这两个 bean 里面。 修改 方法, 不互相引用即可。 我的解决办法:

@Service// @Scope("prototype") 这个Domain 引用太多了,必须变 单例, 否则 容易 出现 循环注入引用的问题

在关键的 domain 类里面, 去掉 多例,默认就是 单例了。即可解决问题

那么问题来了, 单例 和多例有什么区别? 这样 改动真的没有问题? 参考地址: controller 必须是 单例, 这样可以 保证 线程的安全行。 其他的bean 如果是 多例, 可以保证 线程安全性 ,不会 使用到其他 线程的 修改实体 后的 值的, 但是 单例的性能 就比较好, 速度比较快。 因此 ,推荐使用 spring通过对每个request进行threadlocal封装保证每个request都是独立的线程,这样来做线程安全。 大神说的, 这样就是 用 空间来 换取 。。。

存在 循环依赖问题, 还有一种情况就是 bean 的引用 注入的时候, 使用的是 构造函数注入 bean 的方式。 将 注入的方式 换成 属性注入 即可。 循环引用 的方式还可以 产生在 类的 构造函数里面, 比如 类A ,和 类B , 类A 构造函数 引用到 类B 。 而 类B的构造函数 引用到 类A ,这样的情况也是循环引用了, 也是不可以的。

转载于:https://my.oschina.net/u/2419285/blog/861801

你可能感兴趣的文章
OSChina 周一乱弹 ——爱丽三个小时没吃鱼罐头了
查看>>
OSChina 周六乱弹 ——程序员还是大学生的时候 带啥去上学
查看>>
nginx在linux环境下安装
查看>>
14_02_Linux系统启动流程详解之二 内核及init
查看>>
Android Material风格的应用(一)--AppBar TabLayout
查看>>
EasyUI的渣性能
查看>>
puppet自动化运维之cron资源
查看>>
Linux系统下MongoDB的简单安装与基本操作
查看>>
XEN虚拟机复制
查看>>
redis未授权访问导致的安全问题
查看>>
salt Syndic 的实现
查看>>
JSP/Java 获取路径问题
查看>>
我的友情链接
查看>>
43、源码安装MariaDB
查看>>
使用VisualVM、JMC远程监控JVM
查看>>
菜鸟如何应对服务器被黑
查看>>
Java Map接口
查看>>
利用awk i=!i 来输出奇偶行详解
查看>>
iframe高度自适应的方法
查看>>
对素数的判断和素数个数的判断
查看>>