当前位置: 首页 > wzjs >正文

做网站注意哪些方面宣传推广策略

做网站注意哪些方面,宣传推广策略,深圳专业返利网站建设,哪个网站做h5比较好看什么是循环依赖 循环依赖(Circular Dependency) 是指两个或多个 Bean 相互直接或间接依赖,导致容器无法正常初始化这些 Bean。 Service public class ServiceA {Autowiredprivate ServiceB serviceB; // ServiceA 依赖 ServiceB }Service p…

什么是循环依赖

循环依赖(Circular Dependency) 是指两个或多个 Bean 相互直接或间接依赖,导致容器无法正常初始化这些 Bean。

@Service
public class ServiceA {@Autowiredprivate ServiceB serviceB; // ServiceA 依赖 ServiceB
}@Service
public class ServiceB {@Autowiredprivate ServiceA serviceA; // ServiceB 依赖 ServiceA
}

Spring Boot 基于 Spring 框架,其循环依赖的处理机制与 Spring 一致,但在 Spring Boot 2.6+ 版本中默认禁止了循环依赖(通过 spring.main.allow-circular-references=false)。 

产生循环依赖的原因

1.构造函数注入循环依赖

@Service
public class ServiceA {private final ServiceB serviceB;public ServiceA(ServiceB serviceB) { // 构造函数注入this.serviceB = serviceB;}
}@Service
public class ServiceB {private final ServiceA serviceA;public ServiceB(ServiceA serviceA) { // 构造函数注入this.serviceA = serviceA;}
}
  • 直接报错:构造函数注入的循环依赖无法解决,容器启动时抛出 BeanCurrentlyInCreationException

2.Setter/Field 注入循环依赖

在spring中使用@Autowired注解标签进行自动注入,如果不加以处理,会出现循环依赖问题 。

怎么解决循环依赖

在Springboot2.5以前可以通过三级缓存解决单例 Bean 的循环依赖问题。

缓存名称职责
singletonObjects存放完全初始化好的 Bean(一级缓存)
earlySingletonObjects存放提前暴露的早期 Bean(二级缓存)
singletonFactories存放 Bean 的工厂对象(三级缓存)

以最初的ServiceA与ServiceB为例,

  1. 创建 ServiceA,通过工厂将其半成品引用存入三级缓存。

  2. ServiceA 注入 ServiceB,触发 ServiceB 的创建。

  3. 创建 ServiceB,同样将其半成品引用存入三级缓存。

  4. ServiceB 注入 ServiceA 时,从三级缓存中获取 ServiceA 的早期引用,完成 ServiceB 的初始化。

  5. ServiceB 初始化完成后,ServiceA 完成依赖注入,最终初始化。

 出现循环依赖之后的几个解决思路:

1.避免循环依赖(推荐)

  • 重构代码:将公共逻辑抽离到第三个 Bean 中。

  • 使用接口或抽象类:通过面向接口编程解耦具体实现。

2. 允许循环依赖(临时方案)

在 application.properties 中显式允许循环依赖:

# Spring Boot 2.6+ 需要手动开启
spring.main.allow-circular-references=true

这种只适用于Springboot版本在2.6以上的循环依赖被禁止的情形。 

3. 使用 @Lazy 延迟加载

在其中一个依赖上添加 @Lazy,延迟注入 Bean 的初始化:

@Service
public class ServiceA {@Lazy@Autowiredprivate ServiceB serviceB; // 延迟初始化 ServiceB
}

4. 调整注入方式

 优先使用 Setter/Field 注入:避免构造函数注入导致的不可解循环依赖。

@Service
public class ServiceA {private ServiceB serviceB;@Autowiredpublic void setServiceB(ServiceB serviceB) { // Setter 注入this.serviceB = serviceB;}
}

 使用setter注入

循环依赖的局限性

  • 构造函数注入无法解决循环依赖:Spring 容器在创建 Bean 时需先完成构造函数调用,此时依赖的 Bean 尚未初始化。

  • 原型(Prototype)作用域的 Bean:Spring 不管理原型 Bean 的完整生命周期,无法解决其循环依赖。

  • AOP 代理问题:如果 Bean 被 AOP 代理(如 @Async@Transactional),可能导致循环依赖解决失败。

总结

Spring Boot 的循环依赖本质是 Spring 框架的机制问题,解决核心在于:

  1. 理解三级缓存的工作原理。

  2. 优先通过代码设计避免循环依赖。

  3. 必要时合理使用 @Lazy 或调整注入方式。

 尽可能在设计之初就避免循环依赖

http://www.dtcms.com/wzjs/401497.html

相关文章:

  • 网站 公众号 建设方案网站功能
  • 用vs2010做网站登录网络营销活动方案
  • dede怎么做网站日记百度下载安装2021最新版
  • 昆明专业网站建设公司网站推广软件
  • 重庆网络推广排行安徽关键词seo
  • 永久免费网站建设网站发布流程
  • 门户网站建设困难东莞优化网站关键词优化
  • 做网站讯息如何免费推广网站
  • php语言 电商网站建设常熟网络推广
  • 网站建设吉金手指专业12建网站的公司
  • 做行业门户网站注意什么关键词优化难度分析
  • 企业网站建设排名推荐网站建设技术外包
  • 株洲市政府门户网站seo关键词优化案例
  • 昆山做轮胎网站app开发公司排名
  • 开发电子商务网站和开发新闻类网站什么异同百度排名查询
  • 镇江建设网站公司seo搜索引擎优化到底是什么
  • 做海报可以在哪些网站下载素材企业网络营销成功案例
  • 成都网站建设推广详百度一下你就知道原版
  • 庆网站制作公司营销云
  • 怎么建设一个优秀的网站网站建设策划书
  • .net做的网站怎么样网站内容优化关键词布局
  • 做好政府网站建设网页浏览器
  • 英山县住房和城乡建设局网站seo资源咨询
  • 电子商务网站建设步骤有什么江阴网站优化公司
  • 备案网站福州网站优化公司
  • 专业的建设网站服务公司推推蛙网站诊断
  • 营销信息潍坊关键词优化平台
  • 海外营销平台有哪些安徽seo网络推广
  • 如何做下载网站赚钱营销推广活动策划方案大全
  • 纯div+css做网站简洁版谷歌seo排名优化