springboot2.6.x版本的springsecurity注入PasswordEncoder导致循环依赖问题

本文探讨了在SpringBoot应用中遇到的循环依赖问题,具体表现为userSecurityConfig与UserService之间的依赖循环。作者提到,这可能导致类似系统进程死锁的现象。问题在旧项目中未出现,可能与使用的SpringBoot版本2.2.9.RELEASE有关。解决方案包括修改配置允许循环引用或使用@Lazy注解实现Bean的懒加载。此外,还建议使用第三方库Hutool的BCrypt工具类来替代可能导致循环依赖的编码器。

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

按照以前项目搭建框架,启动报错
The dependencies of some of the beans in the application context form a cycle:

在这里插入图片描述
目测是循环依赖什么的问题,
在userSecurityConfig注入了UserService
在这里插入图片描述
在UserService中使用了PasswordEncoder
在这里插入图片描述
在userSecurityConfig继承的SecurityConfig中声明了一个Bean,PasswordEncoder
在这里插入图片描述
我理解的是:这就造成了,在创建A的时候,里面需要调用B,在去调用B的时候,里面需要声明A,就像系统中的进程死锁问题,
奇怪的是,之前的项目也是这么声明和调用的,那个没有出问题,后来发现那个springboot使用的是2.2.9.RELEASE,我切换到这个版本,竟然没有报错,真是版本问题了,

现在我需要在service中使用编码器将用户密码加密,可以使用hutool第三方工具类BCrypt
在这里插入图片描述

针对其他解决方法:
一、改配置文件,直接允许循环引用,简单粗暴:

在这里插入图片描述
二:循环引用主要是因为会导致Spring不知道该先创建哪个Bean才会被禁用的,可以使用@Lazy注解指定某个Bean进行懒加载就可以优雅解决该问题,比如在SecurityConfig中懒加载UserService
在这里插入图片描述

参考链接Spring Bean 循环依赖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值