我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践。

使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加。

服务层中的每个服务可能会消耗其他服务,这些服务将通过@Autowire注入。

问题:当服务数量开始增加时,可能会发生循环依赖性。 它不必指出设计问题……只要在许多服务中自动连接并消耗其他服务之一的中央服务就足够了,就可能发生循环依赖。

循环依赖关系将导致Spring Application Context失败,并且症状是一个错误,清楚地表明了问题所在:

名称为'*********'的Bean已被注入其他Bean [******,**********,**********, **********]的原始版本(作为循环引用的一部分),

但最终被包装(例如,作为自动代理创建的一部分)。 这意味着所说的其他bean不使用该bean的最终版本。 这通常是过度渴望类型匹配的结果–例如,考虑在关闭“ allowEagerInit”标志的情况下使用“ getBeanNamesOfType”。

现代Spring应用程序中的问题是,bean是通过@nnotations(而不是通过XML)定义的,而allowEagerInit标志的选项根本不存在。
用@Lazy注释类的替代解决方案对我来说根本不起作用。

可行的解决方案是将default-lazy-init =“ true”添加到应用程序配置xml文件中:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd ><context:component-scan base-package="com.package"></context:component-scan>
<context:annotation-config/>
...
</beans>

希望这可以帮助。 不知道为什么它不是默认配置。
如果您对为什么这种配置可能不满意有任何建议,请与我们所有人分享。

更新:
经过重新设计后,上述解决方案根本无法解决问题。
因此,我设计了更积极的解决方案以5个步骤解决该问题 。

祝好运!

参考:通过Gal Levinsky博客博客中的JCG合作伙伴 Gal Levinsky 解决了Spring Autowiring中的循环依赖问题 。

翻译自: https://www.javacodegeeks.com/2012/08/resolve-circular-dependency-in-spring.html

解决Spring自动装配中的循环依赖相关推荐

  1. spring自动装配依赖包_解决Spring自动装配中的循环依赖

    spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...

  2. spring注解驱动开发-4 Spring 自动装配

    Spring 自动装配 前言 Spring 自动装配的几种方式 1.@Autowired @Qualifier("组件id") @Primary 2.@Resource方式 3.@ ...

  3. Spring中的循环依赖解决详解

    目录 1 什么是循环依赖? 1.1 构造器循环依赖 1.2 field属性注入循环依赖 1.3 field属性注入循环依赖(prototype) 2 循环依赖处理 2.1 构造器循环依赖(无法解决) ...

  4. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  5. Spring中的循环依赖

    目录 一.什么是循环依赖? 二.Bean的生命周期 2.1 Spring Bean 的生命周期 2.2 Bean 的生成步骤 三.三级缓存 3.1三个缓存分别有什么作用 四.思路分析 4.1 为什么 ...

  6. 面试:讲一讲Spring中的循环依赖

    前言 Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃 ...

  7. 面试必杀技,讲一讲Spring中的循环依赖

    本系列文章: 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configu ...

  8. 学习篇(一)- Spring自动装配的方式

    Spring自动装配的方式 1. 什么是自动装配? ​ 自动装配就是会通过Spring 的上下文为你找出相应依赖项的类,通俗的说就是Spring 会在上下文中自动查找,并自动给Bean装配与其相关的属 ...

  9. Spring源码 IOC和循环依赖AOP

    Spring源码 IOC和循环依赖AOP IOC篇 1.BeanFactory IOC容器,以BeanFactory为载体. BeanFactory,是Spring容器.这是由Spring管理,产生S ...

最新文章

  1. 白帽子讲web安全——认证与会话管理
  2. linux-gzip压缩
  3. Flash Builder4.6 入门Demo_trace
  4. 无人驾驶 ai算法_AI机器学习具有碳足迹,因此无人驾驶汽车也是如此
  5. svn删除文件和解决冲突
  6. MySQL导出sql脚本文件
  7. adams c语言,Adams2013编译C语言用户子程序生成dll超详细教程讲解
  8. 【U盘硬盘复活器】HDD LLF 硬盘低格工具单文件汉化注册版
  9. win32(7)--文件操作
  10. html快捷方式指定浏览器打开网页,设置桌面网址快捷方式,并默认使用指定浏览器打开...
  11. 【#1】小甲鱼新版python学习笔记
  12. win7计算机系统还原,win7怎么系统还原 还原步骤详解
  13. 1.3 项目经理的知识和技能
  14. 加州圣塔克拉拉大学计算机专业,圣塔克拉拉大学在美国排位
  15. Android下Device Tree简介
  16. ILITEK touch driver
  17. 今天睡眠质量记录74分
  18. OpenCv图像处理之resize(缩放)、transpose、rotate(旋转)、flip(翻转)介绍
  19. paddle基于bert的情绪识别
  20. 测试开源.net 混淆器ConfuserEx

热门文章

  1. 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置
  2. Spring websocket 使用@Autowired 出现null
  3. Java8 Lambda总结
  4. 抽取大小: 高斯sigma_无服务器:SLAppForge Sigma入门
  5. sap打勾选项记录_记录意外的开关选项
  6. 设计模式适配器模式_适配器设计模式示例
  7. 静态变量读取属性文件_一种通过变量插值读取属性的方法
  8. jar 、war、ear_在命令行上操作JAR,WAR和EAR
  9. 使用自动伸缩组在AWS中运行安全数据库集群
  10. javafx中css选择器_JavaFX技巧12:在CSS中定义图标