一次spring启动报错BeanCurrentlyInCreationException背后的原因分析-什么情况下循环注入会报错...

本文分析了一次在Spring项目中遇到的BeanCurrentlyInCreationException异常,指出该异常通常由循环注入引起。文章详细解释了Spring解决循环注入的机制,包括创建bean的三个步骤,并强调了构造方法注入在循环依赖时可能导致问题。文中揭示了在使用@Autowired注解并涉及代理对象(如@Async)时,Spring无法解决循环注入,导致异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一次开发中项目突然抛出了BeanCurrentlyInCreationException异常。解决方案是找到循环注入的问题,并重新设计其中的类。当出现循环注入时证明设计的是有问题的。jvm允许循环引用,spring也可以解决循环注入。那为什么还会报错。

定位到报错是因为循环注入时报错,那么就从spring注入一个bean的方式来分析,大家都知道spring提供了三类注册方式。

1.直接在要注入的对象上加注解@Autowired @Resource等。

2.在set方法上加注解.

3.在构造方法中直接注入。

先说结论:1, 2 种spring是可以解决循环注入问题的。但是,当时项目用的第一种,却抛出BeanCurrentlyInCreationException异常。

先大体说一下spring是如何解决循环引用的:

spring初始化一个bean分为三部(单例模式):

  • createBeanInstance 这个时候就是对这个bean调用构造方法,但是没有对里面的属性进行赋值,注入等操作。
  • populateBean,填充属性,这步对配置中指定的property进行populate。这个时候发生注入行为。
  • initializeBean,调用配置中指定的初始化方法(xml中配置的,或者@P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值